目录
(1)尽可能的使用:=去初始化声明一个变量(在函数内部)
(2)尽可能的使用字符代替字符串
(3)尽可能的使用切片代替数组
(4)尽可能的使用数组和切片代替映射(详见参考文献15);
(5)如果只想获取切片中某项值,不需要值的索引,尽可能的使用for range去遍历切片,这比必须查询切片中的每个元素要快一些
(6)当数组元素是稀疏的(例如有很多0值或者空值nil),使用映射会降低内存消耗
(7)初始化映射时指定其容量
(8)当定义一个方法时,使用指针类型作为方法的接受者
(9)在代码中使用常量或者标志提取常量的值
(10)尽可能在需要分配大量内存时使用缓存
(11)使用缓存模板
字符串
strings
strings.Split(s, sep) 用于自定义分割符号来对指定字符串进行分割,同样返回 slice。strings.Join(sl []string, sep string) string //Join() 用于将元素类型为 string 的 slice 使用分割符号来拼接组成一个字符串strings.Contains(s, "f")strings.HasPrefix(s, prefix string) boolstrings.HasSuffix(s, suffix string) boolstrings.Index(s, str string) intstrings.LastIndex(s, str string) intstrings.Replace(str, old, new string, n int) stringstrings.Count(s, str string) intstrings.Repeat(s, count int) stringstrings.TrimSpace(s) 来剔除字符串开头和结尾的空白符号;如果你想要剔除指定字符,则可以使用 strings.Trim(s, "cut") 来将开头和结尾的 cut 去除掉。该函数的第二个参数可以包含任何字符,如果你只想剔除开头或者结尾的字符串,则可以使用 TrimLeft() 或者 TrimRight() 来实现。strings.ToUpper(item)strings.NewReader(str) 用于生成一个 Reader 并读取字符串中的内容,然后返回指向该 Reader 的指针,从其它类型读取内容的函数还有:Read() 从 []byte 中读取内容。ReadByte() 和 ReadRune() 从字符串中读取下一个 byte 或者 rune
数据结构
切片slice
map
map 默认无序
如果你想为 map 排序,需要将 key(或者 value)拷贝到一个切片,再对切片排序(使用 sort 包,详见第 7.6.6 节),然后可以使用切片的 for-range 方法打印出所有的 key 和 value。
import ("fmt""sort")var (barVal = map[string]int{"alpha": 34, "bravo": 56, "charlie": 23,"delta": 87, "echo": 56, "foxtrot": 12,"golf": 34, "hotel": 16, "indio": 87,"juliet": 65, "kili": 43, "lima": 98})func main() {fmt.Println("unsorted:")for k, v := range barVal {fmt.Printf("Key: %v, Value: %v / ", k, v)}keys := make([]string, len(barVal))i := 0for k, _ := range barVal {keys[i] = ki++}sort.Strings(keys)fmt.Println()fmt.Println("sorted:")for _, k := range keys {fmt.Printf("Key: %v, Value: %v / ", k, barVal[k])}}
堆包
container/heap
双向链表
container/list
类型转换
strconv
strconv包提供了字符串和数字之间的转换功能,可以方便地进行类型转换。
strconv.Itoa(int(bytesLength / 1024)) //将int转换为字符串strconv.Atoi(s string) (i int, err error) //将字符串转换为int
cast: 不需要panic!在Go语言中进行类型转换易如反掌且安全。
Json
json包
提供了JSON格式的编解码功能,可以方便地处理JSON数据。
type User struct{Name string `json:"name"`Age int `json:"age"`}user := {"zhangsan", 20}// 实体转jsonjsonStr, err = json.Marshal(user);fmt.Printf("%s\n", jsonStr);myUser := User{}// json转实体myUser, err = json.Unmarshal(&jsonStr);fmt.Printf("%v\n", myUser);
json-to-go 给你一个json结构的数据,能够将代码转换为对应的结构体,直接在代码中使用,这简直太方便~
flag
flag包提供了解析命令行参数的功能,可以方便地获取用户输入的参数。
cobra: 是一个功能强大的命令行工具库,我们用它来实现内部的命令行工具
reflect
reflect包提供了反射的功能,可以在程序运行时动态地获取和修改对象的信息。
日期时间
time
time包提供了时间相关的函数,包括获取当前时间、时间格式化、时间操作等功能。
time.Now()time.Sleep(1 * time.Second)
Math
Decimal
decimal 精度计算
异常
开发工具包
env: 这个库可以将我们的 环境变量 转换为一个 struct
dig: 一个依赖注入库
所有的对象都是单例。有一个统一的地方管理对象。使用时直接传递对象当做参数进来即可(容器会自动注入)。
sql2gorm: 用于将 sql 语句转换为 golang 的 struct
调试工具
perf: 代理工具,支持内存,cpu,堆栈查看,并支持火焰图
gops: A tool to list and diagnose Go processes currently running on your system
vagrant 开发环境管理工具,单机搭建可移植工具的利器。支持多种虚拟机后端。类似于docker
nomad 轻量级容器调度工具 可以非常方便的管理容器和传统应用,相比 k8s 来说,简单不要太多.
weaver 高度可配置化的 http 转发工具,基于 etcd 配置。
foreman 基于procFile进程管理工具. 相比 supervisor 更加简单。
whistle 基于 http,https,websocket 的调试代理工具,配置功能丰富。在线教育的 nohost web 调试工具,基于此开发.
翻译
对象复制
copier: 一个数据复制的库,与 Java 中的 BeanUtils.copy() 类似;可以将两个字段相同但对象不同的 struct 进行数据复制,也支持深拷贝。
验证
govalidator: 使用简单规则验证Go语言的请求数据。受Laravel请求验证启发。
govalidator: 一个用于字符串、结构体和集合的验证器和过滤器包,基于validator.js。
ozzo-validation: 提供可配置和可扩展的数据验证功能
验证码
aj-captcha-go: AJ-Captcha行为验证码的Go实现包
wechat: WeChat SDK for Go (微信SDK:简单、易用)
支付
gopay: 微信、支付宝、通联支付、拉卡拉、PayPal、Apple 的Go版本SDK。【极简、易用的聚合支付SDK】
Excel
Word
unioffice: 文档 (docx) [Word] 读/写/编辑 格式化 图片 表格 Word 转 PDF (docx to pdf) 电子表格 (xlsx) [Excel] 读/写/编辑
图像
imaging: Package imaging 提供了基本的图像处理功能(如调整大小、旋转、裁剪、亮度/对比度调整等)。
gopdf: gopdf是一个用Go语言编写的生成PDF文档的简单库。
gofpdf: gofpdf是一个实现了基于高级支持文本、绘图和图像的PDF文档生成器。
文件IO
io包
提供了读写数据的基本工具,大部分标准库中输入输出相关的包均依赖于此包。
filename := filePath + ".txt"body, err := ioutil.ReadFile(filename)if err != nil { return nil, err}
bufio包
在 io 包的基础上提供更高级的读写缓冲
runtime
提供了与运行时系统进行交互的接口
OS
os包提供了与操作系统交互的函数,包括文件操作、进程管理、环境变量等功能
gin
gin中文文档
gin: gin是一款轻量级的Web框架,具有高性能和易用性的特点,可以快速开发Web应用。
beego
beego: beego是一款全功能的Web框架,具有MVC架构、ORM、路由、缓存、Session等功能。
echo
echo: echo是一款高性能的Web框架,具有路由、中间件、模板等功能,适合构建RESTful API。
go-zero: go-zero是一个集成了各种工程实践的web和rpc框架。
Go kit - A toolkit for microservices
k8s kubernetes: Production-Grade Container Scheduling and Management
nsq: A realtime distributed messaging platform
asynq: 分布式任务队列 保证至少执行一次任务 重试失败的任务 在工作进程崩溃时自动恢复任务 加权优先级队列 严格优先级队列
testing
func Test(t *testing.T) {}
gomonkey 是一个 mock 打桩工具,当我们写单元测试时,需要对一些非接口函数进行 mock 会比较困难,这时就需要用到它了
fmt
fmt.Println(v)func fmt.Fprintln(w io.Writer, a ...invalid type) (n int, err error)fmt.Fprintln(w, "hello, world")
log包
提供了日志记录的功能,可以方便地记录程序运行时的信息。
logrus
logrus_mail 邮件通知hooks
zap
rpc
grpc-go: The Go language implementation of gRPC. HTTP/2 based RPC
http client
req: 简单而强大:简单易用,提供丰富的客户端级和请求级设置,所有设置均为直观的链式方法。
resty: GET、POST、PUT、DELETE、HEAD、PATCH、OPTIONS等简单且可链式调用的设置和请求方法
websocket
websocket: websocket提供了WebSocket协议的支持,可以实现实时通信的功能。
go-sniffer: 可扩展的抓包工具,可以开发自定义协议的工具包 抓包截取项目中的数据库请求并解析成相应的语句。
cfssl: 配置化生成证书 从根证书,到业务侧证书一键生成.
acme.sh: 免费的证书获取工具 基于 acme 协议,从 letsencrypt 生成免费的证书,有效期 1 年,可自动续期。
net/http
func IndexHandler(w http.ResponseWriter, r *http.Request) {fmt.Fprintln(w, "hello, world. http: %s", r.URL.Path)}func main() {http.HandleFunc("/", IndexHandler)http.ListenAndServe(":8080", nil)}
ping
ping: 检测节点连通性,ping包,及其丢包率
useragent
useragent: HTTP User Agent parser for the Go programming language.
sync 异步
sync/atomic 原子操作
// 原子操作版加函数func atomicAdd() {atomic.AddInt64(&sumCount, 1)wg.Done()}
sync.WaitGroup
var wg sync.WaitGroupfunc runTask(id int) {// 推出一个减去1defer wg.Done()fmt.Printf("task %d start..\n", id)time.Sleep(2 * time.Second)fmt.Printf("task %d complete\n", id)}func asyncRun() {for i := 0; i < 10; i++ {go runTask(i + 1)// 没启动一个go routine 就+1wg.Add(1)}}func main() {asyncRun()wg.Wait()}
channel
channel包
Golang中的一种并发通信机制,可以实现协程之间的数据传递和同步。
context
context包
提供了上下文管理的功能,可以方便地控制并发协程的执行。
gorm
gorm: 一个功能齐全的 Golang 对象关系映射库
database/sql
sql包提供了数据库操作的接口,可以方便地连接和操作数据库。)
mysql
mysql包提供了MySQL数据库的支持,可以方便地进行MySQL数据库的操作。
xorm 对象关系映射库
redis
redis包
提供了Redis数据库的支持,可以方便地进行Redis数据库的操作。
redigo
codis: Proxy based Redis cluster solution supporting pipeline and scaling dynamically
kafka
sarama
es
elastic: 这也是一个非常成熟的 elasticsearch 库。
qax-os/ElasticHD: Elasticsearch 可视化DashBoard, 支持Es监控、实时搜索,Index template快捷替换修改,索引列表信息查看, SQL converts to DSL等
mongo
mongo-go-driver
etcd
etcd: Distributed reliable key-value store for the most critical data of a distributed system
go-cache 是一个类似于 Java 中的 Guava cache ,线程安全,使用简单;不需要 分布式缓存 的简单场景可以考虑。
jwt: 一个完整的JSON Web Token (JWT)实现。该库支持解析和验证,以及生成和签名JWT。
oauth2: goauth2的后继者。通用OAuth 2.0包,提供JWT、Google APIs、Compute Engine和App Engine支持。
Consul
circuitbreaker: Circuit Breakers in Go
configor 是一个配置文件读取库,支持 YAML /JSON/TOML 等格式。
viper: 兼容 json,toml,yaml,hcl 等格式的日志库
gocron: Easy and fluent Go cron scheduling
hugo
hugo: The world’s fastest framework for building websites.
zinx: A lightweight concurrent server framework based on Golang.(基于Golang轻量级TCP并发服务器框架).
leaf: A game server framework in Go (golang)
goquery: A little like that j-thing, only in Go.
utils: 基于Go Mod的Golang常用开发工具包utils,包括字符串处理、日期转换、类型转换、切片处理、压缩、加密等
来源地址:https://blog.csdn.net/fzy629442466/article/details/132481524