golang
文章平均质量分 54
米兰的小铁匠1943
这个作者很懒,什么都没留下…
展开
-
go1.13使用私有goproxy缓存加快依赖下载速度
go1.13的Go Modules有了重大改进,具体看看这篇 干货满满的 Go Modules 和 goproxy.cn问题:开发者在自己的电脑设置GOPROXY,Go Module的缓存保存在本地,多人开发时人人都要下载到自己本地,这样遇到网络不好的时候就很不好,另外CI/CD的时候又要重新下载,为了提高依赖的下载速度,所以要在内网搭建一个私有的goproxy,所有依赖都从这里下,不必重复去...原创 2019-12-18 23:04:53 · 1199 阅读 · 2 评论 -
YApi结合swag管理和生成go项目restful API文档
swag通常用来生成go项目的API文档,但是管理功能较弱,多个项目的文档需要做统一管理。YApi是一个强大的接口管理工具,两者结合可以让开发人员减轻维护api文档的负担原创 2019-11-08 21:56:46 · 3153 阅读 · 0 评论 -
go项目源码分析与使用--内存缓存go-cache
1.项目介绍地址: https://github.com/patrickmn/go-cache一个基于内存的key-value存储/缓存项目,类似于Memcached,并且可选择定期的垃圾回收,适合单机程序。代码量不多,也不难懂。2.关键源码cache.gopackage cacheimport ( "encoding/gob" "fmt" "io" "os" "runt...原创 2019-10-21 23:20:55 · 1688 阅读 · 0 评论 -
go项目源码分析与使用--协程池pool
1.项目介绍地址: https://github.com/gobwas/ws-examples/blob/master/src/gopool/pool.go只介绍一个代码文件,它简洁优雅的实现了一个goroutine的pool2.关键源码pool.go// Package gopool contains tools for goroutine reuse.// It is imple...原创 2019-10-20 21:32:21 · 558 阅读 · 0 评论 -
go项目源码分析与使用--定时任务robfig/cron
1.项目介绍地址: https://github.com/robfig/cron该项目就是crontab的go实现,一般用于定时任务,项目代码不多,但是简洁易懂,十分规范2.关键源码├── chain.go├── cron.go└── option.gochain.go//一些中间件,其实就是装饰器package cronimport ( "fmt" "runtime"...原创 2019-10-20 20:47:06 · 1262 阅读 · 0 评论 -
go语言实现--二叉树
二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2^{i-1}个结点;深度为k的二叉树至多有2^k-1个结点;对任何一棵二叉树T,如果其终端结点数为n_0...原创 2019-03-10 23:39:10 · 9447 阅读 · 4 评论 -
Linux下搭建Golang开发环境
gvm是golang的版本管理工具,用它来安装golang的话十分方便,可以切换golang版本,GitHub地址:https://github.com/moovweb/gvm 里面有安装教程,不过我写的这篇稍微有点不同,你们可以先阅读一遍,知道一下意思。 第一步:安装依赖如果是Debian/Ubuntu的:sudo apt-get install curl git mercurial ...原创 2018-06-02 09:43:12 · 1926 阅读 · 0 评论 -
go proxy结合nginx解决golang项目公私有模块依赖问题
go从1.11开始的go proxy的特性能帮我们解决第三方模块的下载,比如 golang.org/x 下的模块。同时公司也有自己的私有模块要依赖。这里是一步解决同时下载公私有模块的问题。原创 2019-07-11 11:15:56 · 1524 阅读 · 0 评论 -
基于Drone+Gitea+Docker对go项目进行CI/CD
Drone是一个go开发的用来CI/CD的好工具,比jenkins和gitlab-ci更加简单好用,部署方便1.准备环境gitea和go proxydocker仓库harborgitea创建一个组织test,在该组织下创建仓库demo,仓库设置里把开发者账号加入到协作者创建一个具有创建钩子权限的管理员账号,把它加入到demo仓库的协作者中,并对仓库有可读权限harbor创建一个公开...原创 2019-07-11 16:00:42 · 4900 阅读 · 4 评论 -
基于Drone+Gitea+K8s对go项目进行CI/CD
环境: 基于Drone+Gitea+Docker对go项目进行CI/CD目标: 把原来由docker run起来的进程交给k8s去进行调度编排前提: 熟悉k8s的基本使用1.kubectl环境打包这里把用户目录下的.kube目录和kubectl程序放到当前目录,打包成镜像,上传到私有仓库DockerfileFROM alpine:3.10COPY .kube /root/.kube...原创 2019-09-12 13:56:01 · 1870 阅读 · 1 评论 -
go语言实现--单链表
复习了一下程杰老师写的《大话数据结构》,书里是代码是C语言写的,我用golang把它们重新实现一遍以及做一点变动。顺序表与链表是非常基本的数据结构,它们可以被统称为线性表。线性表是由 n(n≥0)个数据元素(结点)a[0],a[1],a[2]…,a[n-1] 组成的有限序列。顺序表和链表,是线性表的不同存储结构。它们各自有不同的特点和适用范围。下图摘自《大话数据结构》 ...原创 2019-03-11 00:27:00 · 1952 阅读 · 1 评论 -
go语言实现--广度优先搜索迷宫
迷宫大致如下:左上角和右下角的点分别为起点和终点,灰色的点代表墙,走不通,白色的点可以走通,我们要做的是从起点走到终点,我们每到一个点便从上左下右四个方向探索它周围的四个点,如果是走过的点我们不要探索,计算出它的步数,用的广度优先算法。第一步:把起点(0,0)入队列,每次探索一个点,便把它出队列,坐标是行和列第二步:把(0,0)出队列,开始探索(0,0),发现只有(1,0)走得...原创 2018-05-02 08:34:29 · 1763 阅读 · 3 评论 -
Golang 新手可能会踩的 50 个坑
转自:https://segmentfault.com/a/1190000013739000前言Go 是一门简单有趣的编程语言,与其他语言一样,在使用时不免会遇到很多坑,不过它们大多不是 Go 本身的设计缺陷。如果你刚从其他语言转到 Go,那这篇文章里的坑多半会踩到。如果花时间学习官方 doc、wiki、讨论邮件列表、 Rob Pike 的大量文章以及 Go 的源码,会发现这篇文章中的坑是很常见的...转载 2018-05-06 14:20:50 · 6726 阅读 · 2 评论 -
go语言实现--常用的排序算法
以前用过c和php实现过一些常用的排序算法,现在用golang把它们再实现一遍1.冒泡排序冒泡排序的基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序。时间复杂度为O(n2)代码如下:package mainimport "fmt"func main() { arr := []int{8, 4, 2,...原创 2018-05-21 15:52:10 · 1885 阅读 · 0 评论 -
go语言实现--二分查找算法
二分查找是logN级别的查找算法,前提是有序序列并且存储在顺序表中,如果是存储方式是链表则不能使用。二分查找的核心思想理解起来非常简单,有点类似分治思想。即每次都通过跟区间中的中间元素对比,将待查找的区间缩小为一半,直到找到要查找的元素,或者区间被缩小为 0。但是二分查找的代码实现比较容易写错。你需要着重掌握它的三个容易出错的地方:循环退出条件、mid 的取值,low 和 high 的更新。...原创 2018-05-21 20:03:19 · 2572 阅读 · 0 评论 -
go语言实现--斐波那契数列的3种方法
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)(引...原创 2018-05-21 21:14:16 · 6226 阅读 · 0 评论 -
go语言实现--双向循环链表
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。 代码如下:package doubleLinkedListimport ( "errors" "fmt")type ElemType interface{}...原创 2018-05-27 13:08:10 · 1145 阅读 · 0 评论