一个小技巧加快 golang docker 镜像构建速度,避免频繁下载 go mod

2021-03-28
阅读 1 分钟
9.7k
Dockerfile先 COPY go.mod 执行 go mod download,再 COPY 源码执行 build。利用 docker image 分层构建的特性,每行命令为一层。如果底层不变,则可使用 cache,无需重复构建。源码比 go.mod 修改更频繁。 {代码...} .dockerignore只 COPY go build 需要的文件。 {代码...} 特殊情况go.mod 或 go.sum 变动后需要重新 bu...

Golang 高效的原地数组去重

2021-03-21
阅读 1 分钟
18.5k
使用 struct{} 节省空间, 指定 cap=len(arr) 避免 map 扩容。记录非重复元素索引 j,将元素前移,原地去重,只需一次遍历。

利用 go/ast 语法树做代码生成

2021-02-16
阅读 5 分钟
12.1k
go.uber.org/zap 日志包性能很好,但是用起来很不方便,虽然新版本添加了 global 方法,但仍然别扭:zap.S().Info()。

Go 里面 [...]string{"a", "b", "c"} 加三个点是什么骚写法?

2021-02-11
阅读 1 分钟
1.3k
Array literalsIn an array literal, the ... notation specifies a length equal to the number of elements in the literal. {代码...}

一个微服务 Demo 将我三年 Go Web 开发经验传授给你

2021-02-07
阅读 1 分钟
3.7k
本项目为 Golang 开发的一个微服务 server demo,展示了 grpc、gorm 等常用库的使用,以及 k8s、opentracing 等流行生态的适配,错误处理、Context、Chan 等编码技巧,测试驱动开发的尝试。是作者对自己 Go web 开发经验的记录和总结,配套文档可点击链接查看。

编写可测试的 Go 代码

2021-02-07
阅读 3 分钟
3.4k
integration test(集成测试):也叫组装测试或联合测试。 在单元测试的基础上,将所有模块按照设计要求组装成为子系统或系统,进行集成测试。集成测试通常会接入db,mq,后端接口等真实依赖。

DDD Lite:DDD 领域驱动设计微服务简化版

2021-02-06
阅读 2 分钟
8.5k
DDD 领域驱动设计的大名大家应该都有所耳闻,但是实际项目完整落地 DDD 的很少。因为 DDD 概念繁杂,领域、子域、核心子域、通用子域、实体、值对象、领域服务、应用服务、领域事件、上下文等一大堆概念,直接把人绕晕,对应到实际业务模型时,横看成岭侧成峰,开发人员内部都难以达成一致。

在 Go 项目中优雅的使用 gorm v2

2021-01-26
阅读 4 分钟
24.5k
调用方使用 GetDB 从 globalDB 获取 gorm.DB 进行 CURD。WithContext 实际是调用 db.Session(&Session{Context: ctx}),每次创建新 Session,各 db 操作之间互不影响:

基于 MySQL 分布式锁,防止多副本应用初始化数据重复

2021-01-25
阅读 4 分钟
2.4k
最简单的方法,初始化数据都带上主键,这样主键冲突就会报错。但是这么做我们需要对冲突的错误进行额外处理,因为插入我们一般会复用已写好的 DAO 层代码。

grpc-gateway:让你同时拥有 grpc 和 http 接口,一键生成 swagger 文档

2021-01-24
阅读 3 分钟
7.8k
编写 proto 文件 {代码...} 先决条件:protoc 已安装,参考:[链接] {代码...} grpc-gateway protoc 插件已安装 {代码...} 生成桩代码及 swagger 文档: {代码...} 生成文档先决条件:docker 已安装并运行有了 swagger.json 借助 swagger 相关的工具我们就可以生成文档了。这里我们使用 redoc,通过容器启动一个 server ...

Golang "github.com/pkg/errors" 包使用的正确姿势

2021-01-24
阅读 3 分钟
6.8k
大家应该都知道可以通过 github.com/pkg/errors 这个包来处理 err,WithStack(err) 函数可以打印 stack。

手把手教你本地 k8s 集群搭建云原生 Tekton CICD 流水线

2020-11-10
阅读 4 分钟
3.3k
这是一个演示 Tekton CICD 的 demo。下面我们将从搭建本地 k8s 集群开始,同步镜像至国内并部署 Tekton,一步一步实现一个 CICD 流水线。实现更新代码自动触发流水线,构建镜像推送到目标仓库,并更新 deployment 镜像滚动更新应用,最后钉钉机器人通知到群聊。

Go json unmarshal interface{} field bind to struct

2019-08-18
阅读 2 分钟
10.2k
写代码时碰到这么一个需求,某个字段根据不同条件对应不同子结构体,通过interface返给前端,同时前端上传时也要通过这个字段将数据传给后端。

golang内置包管理工具go mod简明教程

2019-05-28
阅读 2 分钟
27.8k
go modgo buildin package manager.go mod是go语言内置的包管理工具,集成在go tool中,安装好go就可以使用。要求: go version >= 1.11官方文档: [链接]环境变量 {代码...} go mod init初始化update:init现在已经做了优化go mod init <module-name>init报错outside gopath no import comments {代码...} go m...

使用gvm管理多golang版本,但我想使用统一的GOTPAH

2019-05-11
阅读 1 分钟
8.7k
使用gvm管理golang版本遇到一个问题,就是我在.zshrc中设置了GOPATH,但是使用gvm切换后GOPATH又被gvm重新设置了,默认是$GVM_ROOT/pkgsets/go1.12.5/global。而我希望切换不同的GOROOT而GOPATH不变,因为我的项目代码都在原来的GOPATH中。

interface 作为 struct field,谈谈 Golang 结构体中的匿名接口

2019-04-14
阅读 3 分钟
11.5k
golang中通过组合(composite)实现类似继承(extends)和重写(override)的功能,大家可能平时用的比较多的是struct中匿名struct的写法,有没有见过struct中匿名接口(anonymous interface)的写法呢?

golang编译时通过ldflags给包内变量赋值,实现打印版本号及commit

2019-04-11
阅读 2 分钟
5.2k
很多命令行程序都可以通过version参数输出版本信息,commit,操作系统等信息。下面介绍一种方法实现golang编译的命令行程序打印版本号。

go run main.go undefined? golang main包那点事

2018-09-18
阅读 1 分钟
14.7k
最近把我的ss项目做了一下结构调整,一顿重构后,输入go run main.go,编译报错function undefined。额,怎么回事明明把函数定义在main.go上面的文件中啊。之前也遇到过这个问题不过没用深究,下面我们来说说go main包那点事。

golang包管理工具dep使用简明教程

2018-09-18
阅读 2 分钟
11.4k
为什么需要包管理 锁住依赖版本,防止第三方包升级导致代码不兼容,因为go get默认拉取最新版本 减少公共依赖、依赖耦合,将项目的依赖都放在项目vendor下,不依赖gopath下的公共包 方便在新环境快速进入开发状态 安装 dep需要golang版本在1.9以上 各系统安装方法见官方文档: [链接] 设置代理 因为墙的缘故,使用广泛的...

【golang基础】socks编程相关的知识点

2018-04-03
阅读 1 分钟
2.8k
socks五元组:src_ip源ip src_port源端口 dst_ip目标ip dst_port目标端口 protocol传输协议(tcp/udp),这五个中任意一个不同就属于不同的socks,不会冲突

【golang基础】go语言中的方法和interface的实现

2018-03-30
阅读 1 分钟
2.6k
答案是不能,提示Stduent does not implement People (Speak method has pointer receiver),修正方法是var peo People = &Stduent{},赋值为指针