Go 语言规范 - 编码风格篇

2021-01-19
阅读 10 分钟
4.3k
当前版本: v1.0.20201106GitHub: shockerli/go-code-guide命名规则站在调用者的角度,包不是给你自己用的简洁、且见名知义采用通用、大众熟知的缩写命名。比如buf而不是bufio如果缩写的名字会产生歧义,则放弃或换个文件名整个应用或包的主入口文件应当是 main.go,或与应用名称简写相同。比如:spiker 包的主入口文件是...

Gin 框架绑定 JSON 参数使用 jsoniter

2020-08-12
阅读 4 分钟
8.1k
Gin 框架中,处理 JSON 格式的参数绑定时,默认采用的标准包 encoding/json,然而标准包不能满足我们的一些要求,比如兼容字符串整型、PHP空数组、时间格式等。

Go 挖坑指南: cannot take the address & cannot call pointer method

2019-12-05
阅读 3 分钟
11.6k
先看代码 {代码...} 输出结果 {代码...} 问题总结 假设 T 类型的方法上接收器既有 T 类型的,又有 *T 指针类型的,那么就不可以在不能寻址的 T 值上调用 *T 接收器的方法 &B{} 是指针,可寻址 B{} 是值,不可寻址 b := B{} b是变量,可寻址 延伸思考 Go 语言规范中规定了可寻址(addressable)对象的定义: For an ope...

Go 语言优秀资源整理,为项目落地加速🏃

2019-10-31
阅读 19 分钟
11.8k
Go 语言优秀资源整理,为项目落地加速🏃在 GitHub 上稳定更新,觉得不错请点个 Star ❤️如转载分享,请保留出处,谢谢 😆原文地址: [链接]GitHub: [链接]

Go 包依赖管理工具 —— govendor

2019-03-25
阅读 4 分钟
6.2k
govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具。与原生 vendor 无侵入性融合,也支持从其他依赖管理工具迁移,可以很方便的实现同一个包在不同项目中不同版本、以及无相互侵入的开发和管理。

一键解决 go get golang.org/x 包失败

2019-02-24
阅读 2 分钟
27.8k
当我们使用 go get、go install、go mod 等命令时,会自动下载相应的包或依赖包。但由于众所周知的原因,类似于 golang.org/x/... 的包会出现下载失败的情况。如下所示:

gops —— Go 程序诊断分析工具

2018-10-18
阅读 7 分钟
3.7k
GitHub: [链接]一个用于列出和诊断分析系统中正在运行的 Go 程序的命令行工具 安装 {代码...} 命令帮助 执行 gops help 查看帮助文档: {代码...} 使用详解 为了能更好的分析程序,需要在我们的项目中加一行 agent 诊断分析代码,用于统计分析程序问题。 {代码...} 其中,agent. 支持更多的参数: {代码...} Addr可选。...

Go 标准库 http.FileServer 实现静态文件服务

2018-08-21
阅读 3 分钟
13.3k
http.FileServer 方法属于标准库 net/http,返回一个使用 FileSystem 接口 root 提供文件访问服务的 HTTP 处理器。可以方便的实现静态文件服务器。

Go 标准库 —— sync.Mutex 互斥锁

2018-06-05
阅读 2 分钟
7.7k
Mutex 是一个互斥锁,可以创建为其他结构体的字段;零值为解锁状态。Mutex 类型的锁和线程无关,可以由不同的线程加锁和解锁。 方法 func (*Mutex) Lock {代码...} Lock 方法锁住 m,如果 m 已经加锁,则阻塞直到 m 解锁。 func (*Mutex) Unlock {代码...} Unlock 方法解锁 m,如果 m 未加锁会导致运行时错误。 注意 在...

Go 标准库 —— time 常用类型和方法

2018-06-04
阅读 6 分钟
3.8k
time 包提供了时间的显示和测量用的函数,日历的计算采用的是公历本文仅整理演示常用的类型和方法,完整的可参考标准库文档 type Location Location 代表一个(关联到某个时间点的)地点,以及该地点所在的时区 func LoadLocation {代码...} LoadLocation 返回使用给定的名字创建的 Location type Time Time 代表一个纳...

Go 采用 goroutine 和 channel 实现工作池

2018-05-31
阅读 2 分钟
4.7k
假设有一组任务需要异步处理且量很大,那我们需要同时开启多个 worker 以保证任务的处理速度而不会堵塞任务。其他语言,可能会需要开启多进程来完成,多进程的控制、IO 消耗等会是个需要注意的问题,而这些 Go 都能帮我们很轻易的解决。

Go 采用 time.After 实现超时控制

2018-05-29
阅读 1 分钟
24.7k
场景: 假设业务中需调用服务接口A,要求超时时间为5秒,那么如何优雅、简洁的实现呢? 我们可以采用select+time.After的方式,十分简单适用的实现。