【吐血整理】超全 golang 面试题合集 +golang 学习指南 +golang 知识图谱 + 成长路线 一份涵盖大部分 golang 程序员所需要掌握的核心知识
由于外链问题,完整版可【点击】阅读原文或到 github项目 中,欢迎关注。
目录(善用 Ctrl+F)
基础入门
新手
数据类型
map 不初始化使用会怎么样
map 不初始化长度和初始化长度的区别
map 承载多大,大了怎么办
map 的 iterator 是否安全?能不能一边 delete 一边遍历?
字符串不能改,那转成数组能改吗,怎么改
怎么判断一个数组是否已经排序
普通 map 如何不用锁解决协程安全问题
array 和 slice 的区别
零切片、空切片、nil 切片是什么
slice 深拷贝和浅拷贝
map 触发扩容的时机,满足什么条件时扩容?
map 扩容策略是什么
自定义类型切片转字节切片和字节切片转回自动以类型切片
make 和 new 什么区别
slice ,map,chanel 创建的时候的几个参数什么含义
线程安全的 map 怎么实现
流程控制
进阶
包管理
优化
内存碎片化问题
chan 相关的 goroutine 泄露的问题
string 相关的 goroutine 泄露的问题
sync.Pool 的适用场景
go1.13sync.Pool 对比 go1.12 版本优化点
并发编程
sync.map 的优缺点和使用场景
sync.Map 的优化点
包
高级特性
协程和线程的差别
垃圾回收的过程是怎么样的?
什么是写屏障、混合写屏障,如何实现?
开源库里会有一些类似下面这种奇怪的用法:
var _ io.Writer = (*myWriter)(nil)
,是为什么?协程之间是怎么调度的
gc 的 stw 是怎么回事
利用 golang 特性,设计一个 QPS 为 500 的服务器
为什么 gc 会让程序变慢
开多个线程和开多个协程会有什么区别
两个 interface{} 能不能比较
必须要手动对齐内存的情况
golang 怎么做代码优化
问题排查
源码阅读
汇编
实践常用工具
其他
常用官方包
fmt - 实现格式化的输入输出操作,其中的 fmt.Printf()和 fmt.Println()是开发者使用最为频繁的函数。
io - 实现了一系列非平台相关的 IO 相关接口和实现,比如提供了对 os 中系统相关的 IO 功能的封装。我们在进行流式读写(比如读写文件)时,通常会用到该包。
bufio - 它在 io 的基础上提供了缓存功能。在具备了缓存功能后, bufio 可以比较方便地提供 ReadLine 之类的操作。
strconv - 提供字符串与基本数据类型互转的能力。
os - 本包提供了对操作系统功能的非平台相关访问接口。接口为 Unix 风格。提供的功能包括文件操作、进程管理、信号和用户账号等。
sync - 它提供了基本的同步原语。在多个 goroutine 访问共享资源的时候,需要使用 sync 中提供的锁机制。
flag - 它提供命令行参数的规则定义和传入参数解析的功能。绝大部分的命令行程序都需要用到这个包。
encoding/json - JSON 目前广泛用做网络程序中的通信格式。本包提供了对 JSON 的基本支持,比如从一个对象序列化为 JSON 字符串,或者从 JSON 字符串反序列化出一个具体的对象等。
http - 通过 http 包,只需要数行代码,即可实现一个爬虫或者一个 Web 服务器,这在传统语言中是无法想象的。
常用第三方包
数据库操作 - github.com/jinzhu/gorm
搜索 es - github.com/olivere/elastic
rocketmq 操作 - github.com/apache/rocketmq-client-go/v2
rabbitmq 操作 - github.com/streadway/amqp
redis 操作 - github.com/go-redis/redis
etcd 操作 - github.com/coreos/etcd/clientv3
kafka - https://github.com/Shopify/sarama https://github.com/bsm/sarama-cluster
excel 操作 - github.com/360EntSecGroup-Skylar/excelize
ppt 操作 - golang.org/x/tools/cmd/present
go-svg 操作 - https://github.com/ajstarks/svgo
go 布隆过滤器实现 - https://github.com/AndreasBriese/bbloom
json 相关 - https://github.com/bitly/go-simplejson
LRU Cache 实现 - https://github.com/bluele/gcache https://github.com/hashicorp/golang-lru
go 运行时函数替换 - https://github.com/bouk/monkey
toml - https://github.com/toml-lang/toml https://github.com/naoina/toml
viper - https://github.com/spf13/viper
go key/value 存储 - https://github.com/etcd-io/bbolt
基于 ringbuffer 的无锁 golang workpool - https://github.com/Dai0522/workpool
轻量级的协程池 - https://github.com/ivpusic/grpool
打印 go 的详细数据结构 - https://github.com/davecgh/go-spew
基于 ringbuffer 实现的队列 - https://github.com/eapache/queue
windows COM - https://github.com/go-ego/cedar
session - https://github.com/gorilla/sessions
websocket - https://github.com/gorilla/websocket
Action handler - https://github.com/gorilla/handlers
context - https://github.com/gorilla/context
过滤 html 标签 - https://github.com/grokify/html-strip-tags-go
可配置的 HTML 标签过滤 - https://github.com/microcosm-cc/bluemonday
根据 IP 获取地理位置信息 - https://github.com/ipipdotnet/ipdb-go
html 转 markdown - https://github.com/jaytaylor/html2text
goroutine 本地存储 - https://github.com/jtolds/gls
reflect 更高效的反射 API - https://github.com/modern-go/reflect2
msgfmt (格式化字符串,将 %更换为变量名) - https://github.com/modern-go/msgfmt
可取消的 goroutine - https://github.com/modern-go/concurrent
安全的类型转换包 - https://github.com/spf13/cast
从文本中提取链接 - https://github.com/mvdan/xurls
字符串格式处理(驼峰转换) - https://godoc.org/github.com/naoina/go-stringutil
文本 diff 实现 - https://github.com/pmezard/go-difflib
uuid 相关 - https://github.com/satori/go.uuid https://github.com/snluu/uuid
去除 UTF 编码中的 BOM - https://github.com/ssor/bom
生成 mock server - https://github.com/otokaze/mock
go 性能上报到 influxdb - https://github.com/rcrowley/go-metrics
go zookeeper 客户端 - https://github.com/samuel/go-zookeeper
go thrift - https://github.com/samuel/go-thrift
MQTT 客户端 - https://github.com/shirou/mqttcli
hbase - https://github.com/tsuna/gohbase
go 性能上报到 influxdb - https://github.com/rcrowley/go-metrics
go 性能上报到 prometheus - https://github.com/deathowl/go-metrics-prometheus
ps utils - https://github.com/shirou/gopsutil
结构化日志处理(json) - https://github.com/sirupsen/logrus
命令行程序框架 cli - https://github.com/urfave/cli
命令行程序框架 cobra - https://github.com/spf13/cobra
必看项目
gin - github.com/olivere/elastic - 轻量级 web 框架,很多公司都是基于它进行魔改
beego - github.com/beego/beego - 也是 web 框架,比较全能
kratos - github.com/go-kratos/kratos - bilibili 开源的微服务框架,b 站出品必属于精- 品
TiDB - github.com/pingcap/tidb - 见识过 mysql 性能瓶颈之后你会想要选择的一款数据库
其他优秀的开源工具分类
音频和音乐
EasyMIDI - EasyMidi 是一个简单可靠的库,用于处理标准 Midi 文件(SMF)。
flac - 支持 FLAC 流的 Native Go FLAC 编码器/解码器。
gaad - 本机 Go AAC 比特流解析器。
go-sox - 用于 go 的 libsox 绑定。
go_mediainfo - 用于 go 的 libmediainfo 绑定。
gosamplerate - 用于 go 的 libsamplerate 绑定。
id3v2 - 用于 Go 的快速,稳定的 ID3 解析和编写库。
malgo - 迷你音频库。
minimp3 - 轻量级 MP3 解码器库。
mix - 为音乐应用程序基于序列转到本地音频混合器。
mp3 - Native Go MP3 解码器。
music-theory - Go 中的音乐理论模型。
Oto - 在多个平台上播放声音的低级库。
PortAudio - 用于 PortAudio 音频 I / O 库的绑定。
portmidi - 绑定 PortMidi。
taglib - 为 taglib 绑定。
vorbis - “本机” Go Vorbis 解码器(使用 CGO,但没有依赖项)。
waveform - Go 程序包,能够从音频流生成波形图像。
数据结构
algorithms - 算法和数据结构。CLRS 研究。
binpacker - 二进制打包程序和解包程序可帮助用户构建自定义二进制流。
bit - 具有额外的位旋转功能的 Golang 设置数据结构。
bitset - 实现位集的 Go 包。
bloom - 在 Go 中实现的 Bloom 过滤器。
bloom - Golang Bloom 过滤器实现。
boomfilters - 用于处理连续无界流的概率数据结构。
concurrent-writer - 高并发直接替换 bufio.Writer。
conjungo - 一个小型,强大而灵活的合并库。
count-min-log - 执行 Count-Min-Log 草图:使用近似计数器进行近似计数(类似于 Count-Min 草图,但使用较少的内存)。
crunch - Go 包实现了用于轻松处理各种数据类型的缓冲区。
cuckoofilter - Cuckoo 过滤器:是 Go 中实现的计数布隆过滤器的很好替代。
deque - 高度优化的双端队列。
deque - 快速的环形缓冲区双端队列(双端队列)。
dict - Go 的类似 Python 的字典(dict)。
encoding - Go 的整数压缩库。
go-adaptive-radix-tree - 自适应基数树的 Go 实现。
go-datastructures - 有用,高性能和线程安全的数据结构的集合。
go-ef - Elias-Fano 编码的 Go 实现。
go-geoindex - 内存中的地理索引。
go-mcache - 快速内存键:值存储/缓存库。指针缓存。
go-rquad - 具有有效点定位和邻居发现功能的区域四叉树。
gocache - 具有多个存储(内存,memcache,redis 等),可链接,可加载,指标缓存等的完整 Go 缓存库。
goconcurrentqueue - 并发 FIFO 队列。
gods - 数据结构。容器,集合,列表,堆栈,地图,BidiMap,树,HashSet 等。
gofal - Go 的小数 api。
golang-set - Go 的线程安全和非线程安全高性能集。
goset - Go 的有用的 Set 集合实现。
goskiplist - Go 中的跳过列表实现。
gota - Go 的数据框,序列和数据整理方法的实现。
hide - ID 类型,将其编组进/出哈希以防止将 ID 发送给客户端。
hilbert - Go 程序包,用于在空间填充曲线(例如 Hilbert 和 Peano 曲线)之间映射值。
hyperloglog - HyperLogLog 实施,具有稀疏,LogLog-Beta 偏差校正和 TailCut 空间减少功能。
iter - C ++ STL 迭代器和算法的实现。
levenshtein - Levenshtein 距离和相似性度量标准,具有可自定义的编辑费用和通用前缀的类似于 Winkler 的奖金。
levenshtein - 在 Go 中计算 levenshtein 距离的实现。
mafsa - 具有最小完美散列的 MA-FSA 实现。
merkletree - merkle 树的实现,可对数据结构的内容进行有效且安全的验证。
mspm - 用于信息检索的多字符串模式匹配算法。
null - 可空转到类型,可以被编组/解组到/从 JSON。
parsefields - 用于解析类似 JSON 的日志的工具,以收集唯一的字段和事件。
pipeline - 具有扇入和扇出的管线的实现。
ptrie - 前缀树的实现。
remember-go - 缓存慢速数据库查询的通用接口(由 redis,memcached,ristretto 或内存支持)。
ring - 围棋实现了高性能,线程安全的布隆过滤器。
roaring - 实施压缩位集的软件包。
set - 使用 LinkedHashMap 的围棋设置简单的数据结构实现。
skiplist - 非常快的 Go Skiplist 实施。
skiplist - Go 中的跳过列表实现。
timedmap - 具有过期的键/值对的地图。
treap - 使用树堆的持久快速排序的地图。
trie - Go 中的 Trie 实现。
ttlcache - 内存中的 LRU 字符串接口{}映射,其中包含 golang 的到期时间。
typ - 空类型,安全的原始类型转换和从复杂结构中获取值。
willf/bloom - Go 包实现 Bloom 过滤器。
分布式系统
celeriac - 用于在 Go 中添加支持以交互和监视 Celery 工作者,任务和事件的库。
consistent - 具有受限负载的一致哈希
dht - BitTorrent Kademlia DHT 实施。
digota - grpc 电子商务微服务。
dot - 使用操作转换/ OT 进行分布式同步。
doublejump - 改进后的 Google 的跳转一致性哈希。
dragonboat - Go 中功能齐全的高性能多组 Raft 库。
drmaa - 基于 DRMAA 标准的集群调度程序的作业提交库。
dynamolock - DynamoDB 支持的分布式锁定实现。
dynatomic - 将 DynamoDB 用作原子计数器的库。
emitter-io - 使用 MQTT,Websockets 和 love 构建的高性能,分布式,安全和低延迟的发布-订阅平台。
flowgraph - 基于流的编程包。
gleam - 用纯围棋和 Luajit 快速和可扩展的分布式的 map / reduce 系统,具有 Luajit 的高性能结合 Go 的高并发,单独运行或分发。
glow - 易于使用的可扩展的分布式大数据处理,Map-Reduce,DAG 执行,全部在纯 Go 中进行。
go-health - health-用于在服务中启用异步依赖项运行状况检查的库。
go-jump - Google 的“ Jump”一致性哈希函数的端口。
go-kit - 支持服务发现,负载平衡,可插拔传输,请求跟踪等的微服务工具包
go-sundheit - 建立用于支持为 golang 服务定义异步服务运行状况检查的库。
gorpc - 简单,快速和可扩展的 RPC 库,可实现高负载。
grpc-go - gRPC 的 Go 语言实现。基于 HTTP / 2 的 RPC。
hprose - 十分新颖的 RPC 库,现在支持 25 种以上的语言。
jsonrpc - jsonrpc 软件包可帮助实现 JSON-RPC 2.0。
jsonrpc - JSON-RPC 2.0 HTTP 客户端实现。
KrakenD - 具有中间件的超高性能 API 网关框架。
liftbridge - NATS 的轻量级,容错消息流。
micro - 可插拔的 microService 工具箱和分布式系统平台。
NATS - 用于微服务,IoT 和云本机系统的轻量级高性能消息传递系统。
outboxer - Outboxer 是一个实现库模式的 go 库。
pglock - PostgreSQL 支持的分布式锁定实现。
raft - HashiCorp 的 Raft 共识协议的 Golang 实现。
raft - 围棋实施筏一致协议,由 CoreOS 的。
rain - BitTorrent 客户端和库。
redis-lock - 使用 Redis 的简化分布式锁定实现。
resgate - 用于构建 REST,实时和 RPC API 的实时 API 网关,其中所有客户端都可以无缝同步。
ringpop-go - Go 应用程序的可扩展,容错应用程序层分片。
rpcx - 分布式可插拔 RPC 服务框架,例如阿里巴巴 Dubbo。
tendermint - 高性能中间件,用于使用 Tendermint 共识和区块链协议将以任何编程语言编写的状态机转换为拜占庭容错复制状态机。
torrent - BitTorrent 客户端软件包。
电子邮件
chasquid - 用 Go 编写的 SMTP 服务器。
douceur - CSS 内衬为您的 HTML 电子邮件。
email - 用于 Go 的强大而灵活的电子邮件库。
go-dkim - DKIM 库,用于签名和验证电子邮件。
go-imap - 用于客户端和服务器的 IMAP 库。
go-message - Internet 消息格式和邮件消息的流库。
go-premailer - Go 中 HTML 邮件的内联样式。
go-simple-mail - 使用 SMTP 保持活动状态和两个超时发送电子邮件的非常简单的程序包:连接和发送。
Hectane - 提供 HTTP API 的轻型 SMTP 客户端。
hermes - Golang 软件包,可生成干净的响应式 HTML 电子邮件。
mailchain - 将加密的电子邮件发送到用 Go 编写的区块链地址。
mailgun-go - Go 库,用于使用 Mailgun API 发送邮件。
MailHog - 通过 Web 和 API 界面进行电子邮件和 SMTP 测试。
SendGrid - SendGrid 的 Go 库,用于发送电子邮件。
smtp - SMTP 服务器协议状态机。
嵌入式脚本语言
anko - 用 Go 语言编写的可编写脚本的解释器。
binder - 转到基于gopher-lua的 Lua 绑定库。
cel-go - 具有渐进式输入功能的快速,便携式,非图灵完整表达评估。
expr - 可以评估表达式的引擎。
gentee - 可嵌入的脚本编程语言。
gisp - Go 中的简单 LISP。
go-duktape - Go 的 Duktape JavaScript 引擎绑定。
go-lua - Lua 5.2 VM 到纯 Go 的端口。
go-php - Go 的 PHP 绑定。
go-python - 与 CPython C-API 的幼稚 go 绑定。
golua - Lua C API 的绑定。
gopher-lua - 用 Go 编写的 Lua 5.1 VM 和编译器。
gval - 用 Go 编写的高度可定制的表达语言。
ngaro - 可嵌入的 Ngaro VM 实现,支持在 Retro 中编写脚本。
otto - 用 Go 编写的 JavaScript 解释器。
purl - Go 中嵌入的 Perl 5.18.2。
tengo - 用于 Go 的字节码编译脚本语言。
错误处理
emperror - Go 库和应用程序的错误处理工具和最佳实践。
errlog - 可破解的软件包,用于确定错误的负责任的源代码(以及其他一些快速调试功能)。可插入任何现成的记录器。
errors - 下拉更换为标准库的错误包和 github.com/pkg/errors。提供各种错误处理原语。
errors - 提供简单错误处理原语的软件包。
errors - 简单 golang 错误处理与分类元。
errorx - 具有堆栈跟踪,错误组成等的功能丰富的错误包。
Falcon - 一个简单但功能强大的错误处理软件包。
go-multierror - Go(golang)软件包,用于将错误列表表示为单个错误。
tracerr - 带有堆栈跟踪和源代码片段的 Golang 错误。
werr - 错误包装程序为 Go 中的错误类型创建了一个包装程序,该包装程序捕获了调用它的文件,行和堆栈。
文件
afero - Go 的文件系统抽象系统。
afs - Go 的抽象文件存储(mem,scp,zip,tar,云:s3,gs)。
bigfile - 文件传输系统,支持使用 http api,rpc 调用和 ftp 客户端管理文件。
checksum - 计算大型文件的消息摘要,例如 MD5 和 SHA256。
go-csv-tag - tag-使用标签加载 csv 文件。
go-decent-copy - 复制 human 文件。
go-exiftool - ExifTool 的 Go 绑定,这是众所周知的库,用于从文件(图片,PDF,office,...)提取尽可能多的元数据(EXIF,IPTC 等)。
go-gtfs - 在 go 中加载 gtfs 文件。
notify - 具有简单 API 的文件系统事件通知库,类似于 os / signal。
opc - 为 Go 加载 Open Packaging Conventions(OPC)文件。
pdfcpu - PDF 处理器。
skywalker - 一种软件包,允许一个人轻松地同时通过文件系统。
stl - 读取和写入 STL(立体光刻)文件的模块。并发读取算法。
tarfs - tar 文件FileSystem interface接口的实现。
vfs - 跨多种文件系统类型(例如 os,S3 和 GCS)的 Go 的一组可插拔,可扩展且自以为是的文件系统功能。
金融
accounting - golang 的货币和货币格式。
currency - 高性能和准确的货币计算包。
decimal - 任意精度定点十进制数字。
go-finance - Go 中的综合金融市场数据。
go-finance - 金融功能库,用于货币时间价值(年金),现金流量,利率转换,债券和折旧计算。
go-finance - 获取汇率,通过 VIES 检查增值税号和检查 IBAN 银行帐号的模块。
go-money - Fowler 的 Money 模式的实现。
ofxgo - 查询 OFX 服务器和/或解析响应(使用示例命令行客户端)。
orderbook - 匹配引擎的限价订单在 Golang。
techan - 具有高级市场分析和交易策略的技术分析库。
transaction - 以多线程模式运行的嵌入式帐户嵌入式事务数据库。
vat - 增值税号验证和欧盟增值税率。
游戏开发
Azul3D - 用 Go 语言编写的 3D 游戏引擎。
Ebiten - Go 中死的简单 2D 游戏库。
engo - Engo 是用 Go 语言编写的开源 2D 游戏引擎。它遵循实体组件系统范式。
g3n - Go 3D 游戏引擎。
GarageEngine - 用 Go 语言编写的 2D 游戏引擎,可在 OpenGL 上使用。
glop - Glop(权力游戏库)是一个相当简单的跨平台游戏库。
go-astar - A 路径查找算法的 Go 实现。
go-collada - Go 包,用于 Collada 文件格式。
go-sdl2 - Simple DirectMedia Layer的 Go 绑定。
go3d - 用于 Go 的面向性能的 2D/3D 数学软件包。
gonet - 使用 golang 实现的游戏服务器框架。
goworld - 可扩展的游戏服务器引擎,具有空间实体框架和热插拔功能。
Leaf - 轻量级游戏服务器框架。
nano - 重量轻,设备,高性能的基于 golang 游戏服务器架构。
Oak - Pure Go 游戏引擎。
Pitaya - 可扩展的游戏服务器框架,具有群集支持和通过 C SDK 的 iOS,Android,Unity 等客户端库。
Pixel - Go 中的手工制作 2D 游戏库。
raylib-go - 去绑定 raylib,简单和易于使用的库,以了解电子游戏编程。
termloop - Go 的基于终端的游戏引擎,建立在 Termbox 之上。
地理位置
geocache - 适用于基于地理位置的应用程序的内存中缓存。
geoserver - geoserver 是 Go 软件包,用于通过 GeoServer REST API 操纵 GeoServer 实例。
gismanager - 将 GIS 数据(矢量数据)发布到 PostGIS 和 Geoserver。
osm - 用于读取,编写和使用 OpenStreetMap 数据和 API 的库。
pbf - OpenStreetMap PBF golang 编码器/解码器。
S2 geometry - Go 中的 S2 几何库。
Tile38 - 具有空间索引和实时地理围栏的地理位置数据库。
WGS84 - 库坐标转换和变换(ETRS89,OSGB36,NAD83,RGF93,网络墨卡托 UTM)。
编译器
c4go - 将 C 代码转换为 Go 代码。
f4go - 将 FORTRAN 77 代码转换为 Go 代码。
gopherjs - 从 Go 到 JavaScript 的编译器。
llgo - Go 的基于 LLVM 的编译器。
tardisgo - Golang 转换为 CPP / CSharp / Java / JavaScript 转译器。
Goroutines
ants - 用于 golang 的高性能 goroutine 池。
artifex - Golang 使用基于工作程序的分派的简单内存中作业队列。
async - 一种异步执行功能的安全方法,以防万一。
breaker - 使执行流程可中断的灵活机制。
cyclicbarrier - 用于 golang 的 CyclicBarrier。
go-floc - 轻松编排 goroutine。
go-flow - 控制 goroutine 的执行顺序。
go-tools/multithreading - 使用带有简单 API 的轻量级库管理 goroutine 池。
go-trylock - 支持 Golang 的读写锁的 TryLock。
go-waitgroup - sync.WaitGroup 与错误处理和并发控制类似。
gohive - Go 的高性能和易于使用的 Goroutine 池。
gollback - 异步简单函数实用程序,用于管理闭包和回调的执行。
GoSlaves - 简单和异步 Goroutine 池库。
goworker - goworker 是基于 Go 的后台工作者。
gowp - gowp 是并发限制 goroutine 池。
gpool - 管理可调整大小的上下文感知 goroutine 池以绑定并发。
grpool - 轻巧的 Goroutine 池。
Hunch - 预感提供功能,如:All,First,Retry,Waterfall 等等,这使得异步流控制更加直观。
oversight - 监督是 Erlang 监督树的完整实现。
parallel-fn - 并行运行功能。
pool - 有限的消费者 goroutine 池或无限制的 goroutine 池,以便更轻松地处理和取消 goroutine。
queue - 为您提供 sync.WaitGroup 类似的队列组可访问性。帮助您节流和限制 goroutine,等待所有 goroutine 结束等等。
routine - 具有上下文和支持的例程控制:Main,Go,Pool 和一些有用的 Executors。
semaphore - 基于通道和上下文的具有锁定/解锁操作超时的信号量模式实现。
semaphore - 基于 CAS 的快速可调整大小的信号量实现(比基于通道的信号量实现更快)。
stl - 基于软件交易内存(STM)并发控制机制的软件交易锁。
threadpool - Golang 线程池实现。
tunny - 线程池 golang。
worker-pool - goworker 是一个简单的 Go 异步工作池。
workerpool - Goroutine 池,它限制了任务执行的并发性,而不是排队的任务数。
图形界面
app - 打包以使用 GO,HTML 和 CSS 创建应用的程序。支持:MacOS,Windows 正在开发中。
fyne - 为 Go 设计的跨平台本机 GUI,使用 EFL 呈现。支持:Linux,macOS,Windows。
go-astilectron - 使用 GO 和 HTML / JS / CSS(由 Electron 支持)构建跨平台 GUI 应用。
go-gtk - GTK 的绑定。
go-sciter - Go 绑定:用于现代桌面 UI 开发的可嵌入 HTML / CSS / script 引擎。跨平台。
gotk3 - GTK3 的绑定。
gowd - 使用 GO,HTML,CSS 和 NW.js 进行快速简单的桌面 UI 开发。跨平台。
qt - Go 的 Qt 绑定(支持 Windows / macOS / Linux / Android / iOS / Sailfish OS / Raspberry Pi)。
ui - Go 的平台本地 GUI 库。跨平台。
Wails - 使用内置 OS HTML 渲染器的 HTML UI 的 Mac,Windows,Linux 桌面应用程序。
walk - Go 的 Windows 应用程序库工具包。
webview - 具有简单双向 JavaScript 绑定的跨平台 Webview 窗口(Windows / macOS / Linux)。
go-appindicator - libappindicator3 C 库的 Go 绑定。
gosx-notifier - Go 的 OSX 桌面通知库。
mac-activity-tracker - OSX 库,用于通知计算机上的任何(可插入)活动。
mac-sleep-notifier - golang 中的 OSX 睡眠/唤醒通知。
robotgo - Go 本机跨平台 GUI 系统自动化。控制鼠标,键盘等。
systray - 跨平台的 Go 库,用于在通知区域中放置图标和菜单。
trayhost - 跨平台的 Go 库,用于在主机操作系统的任务栏中放置一个图标。
图片
bild - 纯 Go 中图像处理算法的集合。
bimg - 使用 libvips 进行快速有效的图像处理的小包装。
cameron - Go 的头像生成器。
canvas - 将矢量图形转换为 PDF,SVG 或光栅图像。
darkroom - 具有可变存储后端的图像代理和侧重于速度和弹性的图像处理引擎。
geopattern - 从字符串创建漂亮的生成图像图案。
gg - 纯 Go 中的 2D 渲染。
gift - 图像处理过滤器的包装。
gltf - 高效,强大的 glTF 2.0 读取器,写入器和验证器。
go-cairo - 用于 cairo 图形库的绑定。
go-gd - GD 库的 Go 绑定。
go-nude - Go 的裸露检测。
go-opencv - 用于 OpenCV 的绑定。
go-webcolors - webcolors 库的端口,从 Python 到 Go。
gocv - 使用 OpenCV 3.3+进行计算机视觉的 Go 软件包。
goimagehash - Go 感知图像哈希包。
goimghdr - imghdr 模块确定 Go 文件中包含的图像类型。
govatar - 用于生成有趣头像的库和 CMD 工具。
image2ascii - 将图像转换为 ASCII。
imagick - 绑定到 ImageMagick 的 MagickWand C API。
imaginary - 用于图像大小调整的快速,简单的 HTTP 微服务。
imaging - 简单的 Go 图像处理包。
img - 选择图像处理工具。
ln - Go 中的 3D 线条艺术渲染。
mergi - 用于图像处理(合并,裁切,调整大小,水印,动画)的 Tool&Go 库。
mort - 用 Go 编写的存储和图像处理服务器。
mpo - 用于 MPO 3D 照片的解码器和转换工具。
picfit - 用 Go 编写的图像大小调整服务器。
pt - 用 Go 语言编写的路径跟踪引擎。
resize - 使用常见的插值方法为 Go 调整图像大小。
rez - 在纯 Go 和 SIMD 中调整图像大小。
smartcrop - 查找适合任何图像和尺寸的优质作物。
steganography - 用于 LSB 隐写术的 Pure Go 库。
stegify - 用于 LSB 隐写术的 Go 工具,能够隐藏图像中的任何文件。
svgo - 用于 SVG 生成的 Go 语言库。
tga - 软件包 tga 是 TARGA 图像格式的解码器/编码器。
物联网
connectordb - 量化自我和物联网的开源平台。
devices - IoT 设备库套件,针对 x / exp / io 进行实验。
eywa - Project Eywa 本质上是一个连接管理器,用于跟踪连接的设备。
flogo - Project Flogo 是一个用于 IoT Edge 应用和集成的开源框架。
gatt - 盖特是一个围棋包构建低功耗蓝牙外设。
gobot - Gobot 是机器人技术,物理计算和物联网的框架。
huego - 适用于 Go 的飞利浦 Hue 扩展客户端库。
iot - IoT 是用于实现 Google IoT Core 设备的简单框架。
mainflux - 工业物联网消息和设备管理服务器。
periph - 外设 I / O 与低级别的主板设备接口。
sensorbee - 用于物联网的轻量级流处理引擎。
JSON 格式
ajson - 具有 JSONPath 支持的 golang 的抽象 JSON。
gjo - 用于创建 JSON 对象的小型实用程序。
GJSON - 使用一行代码获取 JSON 值。
go-jsonerror - Go-JsonError 可让我们轻松创建遵循 JsonApi 规范的 json 响应错误。
go-respond - Go 包,用于处理常见的 HTTP JSON 响应。
gojq - Golang 中的 JSON 查询。
gojson - 从示例 JSON 自动生成 Go(golang)结构定义。
JayDiff - 用 Go 编写的 JSON diff 实用程序。
jettison - 用于 Go 的高性能,无反射 JSON 编码器。
JSON-to-Go - 将 JSON 转换为 Go 结构。
json2go - 高级 JSON 到 Go 结构转换。提供可以解析多个 JSON 文档并创建适合所有 JSON 的结构的包。
jsonapi-errors - 根据 JSON API 错误参考进行绑定。
jsonf - 突出显示格式和获取 JSON 的结构查询的控制台工具。
jsongo - Fluent API,可以更轻松地创建 Json 对象。
jsonhal - 简单的 Go 包,用于将自定义结构编组为 HAL 兼容的 JSON 响应。
kazaam - 用于 JSON 文档的任意转换的 API。
mp - 简单的 cli 电子邮件解析器。当前,它使用标准输入并输出 JSON。
机器学习
bayesian - 贝叶斯分类为 Golang 天真。
CloudForest - 快速,灵活,多线程的决策树集合,用于纯 Go 中的机器学习。
eaopt - 进化优化库。
evoli - 遗传算法和粒子群优化库。
fonet - 用 Go 编写的深度神经网络库。
go-cluster - k 模式和 k-原型聚类算法的 Go 实现。
go-deep - Go 中功能丰富的神经网络库
go-fann - 快速人工神经网络(FANN)库的 Go 绑定。
go-galib - 用 Go / golang 编写的遗传算法库。
go-pr - Go lang 中的模式识别包。
gobrain - 用 go 语言编写的神经网络
godist - 各种概率分布及相关方法。
goga - Go 的遗传算法库。
GoLearn - 用于 Go 的通用机器学习库。
golinear - Go 的 liblinear 绑定。
GoMind - Go 中的简单神经网络库。
goml - Go 中的在线机器学习。
Goptuna - 用于 Go 语言编写的黑盒函数的贝叶斯优化框架。一切都会被优化。
goRecommend - 用 Go 编写的推荐算法库。
gorgonia - 基于图形的计算库,例如 Theano for Go,它提供了用于构建各种机器学习和神经网络算法的原语。
gorse - 基于 Go 编写的协作过滤的离线推荐系统后端。
goscore - 用于 PMML 的 Go Scoring API。
gosseract - 使用 Tesseract C ++库的 OCR(光学字符识别)软件包。
libsvm - 基于 LIBSVM 3.14 libsvm 的 golang 版本衍生作品。
neat - 用于增强拓扑神经演化(NEAT)的即插即用,并行 Go 框架。
neural-go - go-在 Go 中实现的多层感知器网络,通过反向传播进行训练。
ocrserver - 一个简单的 OCR API 服务器,非常容易被 Docker 和 Heroku 部署。
onnx-go - 转到开放神经网络交换(ONNX)的接口。
probab - 概率分布函数。贝叶斯推断。用纯 Go 语言编写。
regommend - 建议和协作过滤引擎。
shield - 贝叶斯文本分类器,具有灵活的标记器和 Go 的存储后端。
tfgo - 易于使用的 Tensorflow 绑定:简化了官方 Tensorflow Go 绑定的使用。在 Go 中定义计算图,加载并执行经过 Python 训练的模型。
Varis - Golang 神经网络。
金融
unioffice - Pure Go 库,用于创建和处理 Office Word(.docx),Excel(.xlsx)和 Powerpoint(.pptx)文档。
excelize - Golang 库用于读取和写入 Microsoft Excel™(XLSX)文件。
go-excel - 一个简单而轻便的阅读器,可以将类似于 related-db 的 excel 读取为表格。
goxlsxwriter - libxlsxwriter 的 Golang 绑定,用于编写 XLSX(Microsoft Excel)文件。
xlsx - 用于简化在 Go 程序中读取 Microsoft Excel 最新版本使用的 XML 格式的库。
xlsx - 在 Go 程序中快速/安全地读取/更新您现有的 Microsoft Excel 文件的方法。
自然语言处理
getlang - 快速自然语言检测程序包。
go-i18n - 用于处理本地化文本的软件包和一个随附工具。
go-mystem - CGo 与 Yandex.Mystem 的绑定-俄罗斯形态分析仪。
go-nlp - 用于处理离散概率分布的实用程序和其他可用于执行 NLP 工作的工具。
go-pinyin - CN Hanzi 至 Hanyu 拼音转换器。
go-stem - 搬运程序阻止算法的实现。
go-unidecode - Unicode 文本的 ASCII 音译。
go2vec - 用于 word2vec 嵌入的阅读器和实用程序功能。
gojieba - 这是一个围棋实施解霸其中中国分词算法。
golibstemmer - 雪球库 libstemmer 库的绑定,包括 porter 2。
gotokenizer - 基于字典和 Goram 语言的 Bigram 语言模型的标记器。(现在仅支持中文细分)
gounidecode - Go 的 Unicode 音译器(也称为 unidecode)。
gse - 进行有效的文本分割;支持英语,中文,日语等。
icu - CGO 结合为 ICU4C C 库检测和转换功能。保证与版本 50.1 兼容。
kagome - 用纯 Go 语言编写的 JP 形态分析仪。
libtextcat - libtextcat C 库的 Cgo 绑定。保证与 2.2 版兼容。
MMSEGO - 这是 MMSEG 的 GO 实现,它是中文分词算法。
nlp - 从字符串中提取值,并用 nlp 填充您的结构。
nlp - 支持 LSA(潜在语义分析)的自然语言处理库。
paicehusk - Paice / Husk 提取算法的 Golang 实现。
petrovich - 彼得罗维奇(Petrovich)是库,在给定的语法情况下使用俄语名称。
porter - 这是 Martin Porter 的 Porter 干算法的 C 实现的相当简单的移植。
porter2 - 非常快的 Porter 2 提取器。
prose - 用于文本处理的库,支持标记化,词性标记,命名实体提取等。仅限英语。
RAKE.go - 快速自动关键字提取算法(RAKE)的 Go 端口。
segment - 用于执行 Unicode 标准附件#29 中所述的 Unicode 文本分段的 Go 库
sentences - 句子标记器:将文本转换为句子列表。
shamoji - shamoji 是用 Go 编写的单词过滤程序包。
snowball - Go 的雪球茎端口(cgo 包装器)。提供单词词干提取功能 Snowball 本机。
stemmer - 用于 Go 编程语言的 Stemmer 软件包。包括英语和德语词干。
textcat - Go 软件包,用于基于 n-gram 的文本分类,并支持 utf-8 和原始文本。
whatlanggo - Go 的自然语言检测程序包。支持 84 种语言和 24 种脚本(书写系统,例如拉丁语,西里尔字母等)。
when - 自然 EN 和 RU 语言日期/时间分析器具有可插拔的规则。
网络
arp - 包 arp 实现 ARP 协议,如 RFC 826 中所述。
buffstreams - 通过 TCP 流化协议缓冲区数据变得容易。
canopus - CoAP 客户端/服务器实施(RFC 7252)。
cidranger - Go 的快速 IP 到 CIDR 查找。
dhcp6 - 软件包 dhcp6 实现了 DHCPv6 服务器,如 RFC 3315 中所述。
dns - 使用 DNS 的 Go 库。
ether - 用于发送和接收以太网帧的跨平台 Go 软件包。
ethernet - 程序包 ethernet 实施 IEEE 802.3 以太网 II 帧和 IEEE 802.1Q VLAN 标签的封送处理。
fasthttp - 软件包 fasthttp 是 Go 的一种快速 HTTP 实现,比 net / http 快 10 倍。
fortio - 负载测试库和命令行工具,高级回显服务器和 Web UI。允许指定设置的每秒查询负载,并记录延迟直方图和其他有用的统计数据并对其进行图形化。Tcp,Http,gRPC。
ftp - 程序包 ftp 实现 RFC 959 中所述的 FTP 客户端。
gev - gev 是基于 Reactor 模式的轻量级,快速,无阻塞的 TCP 网络库。
gmqtt - Gmqtt 是一个灵活的高性能 MQTT 代理库,它完全实现了 MQTT 协议 V3.1.1。
gnet - gnet 是一个高性能的,用纯围棋轻便,非阻塞,事件循环网络库。
gNxI - 使用 gNMI 和 gNOI 协议的网络管理工具的集合。
go-getter - Go 库,用于使用 URL 从各种来源下载文件或目录。
go-powerdns - Golang 的 PowerDNS API 绑定。
go-stun - STUN 客户端的 Go 实现(RFC 3489 和 RFC 5389)。
gobgp - 使用 Go 编程语言实现的 BGP。
golibwireshark - 软件包 golibwireshark 使用 libwireshark 库来解码 pcap 文件并分析解剖数据。
gopacket - Go 库,用于使用 libpcap 绑定进行数据包处理。
gopcap - libpcap 的包装器。
goshark - 软件包 goshark 使用 tshark 解码 IP 数据包并创建数据结构以分析数据包。
gosnmp - 用于执行 SNMP 操作的本机 Go 库。
gosocsvr - 套接字服务器变得简单。
gotcp - 用于快速编写 tcp 应用程序的 Go 软件包。
grab - 用于管理文件下载的软件包。
graval - 实验性 FTP 服务器框架。
HTTPLab - HTTPLabs 可让您检查 HTTP 请求并伪造响应。
iplib - 受 python ipaddress 和 ruby ipaddr 启发而使用 IP 地址(net.IP,net.IPNet)的库
jazigo - Jazigo 是用 Go 语言编写的工具,用于检索多个网络设备的配置。
kcp-go - KCP-快速可靠的 ARQ 协议。
kcptun - 基于 KCP 协议的极其简单和快速的 udp 隧道。
lhttp - 强大的 websocket 框架,可更轻松地构建 IM 服务器。
linkio - 用于读取器/写入器接口的网络链接速度模拟。
llb - 这是代理服务器的非常简单但快速的后端。对于零内存分配和快速响应的快速重定向到预定义域很有用。
mdns - Golang 中的简单 mDNS(多播 DNS)客户端/服务器库。
mqttPaho - Paho Go 客户端提供了一个 MQTT 客户端库,用于通过 TCP,TLS 或 WebSockets 连接到 MQTT 代理。
NFF-Go - 用于快速开发云和裸机(以前的 YANFF)的高性能网络功能的框架。
packet - 通过 TCP 和 UDP 发送数据包。如果需要,它可以缓冲消息和热交换连接。
peerdiscovery - Pure Go 库,用于使用 UDP 多播的跨平台本地对等发现。
portproxy - 简单的 TCP 代理,它将不支持它的 API 添加到 CORS 支持中。
publicip - 软件包 publicip 返回您的面向公众的 IPv4 地址(互联网出口)。
quic-go - 在纯 Go 中实现 QUIC 协议。
raw - 包 raw 允许在设备驱动程序级别为网络接口读取和写入数据。
sftp - 程序包 sftp 实现 SSH 文件传输协议,如https://filezilla-project.org/specs/draft-ietf-secsh-filexfer-02.txt
ssh - 用于构建 SSH 服务器的高级 API(包装 crypto / ssh)。
sslb - 这是一个超级简单的负载均衡器,只是一个实现某种性能的小项目。
stun - 实施 RFC 5389 STUN 协议。
tcp_server - 用于更快地构建 tcp 服务器的 Go 库。
tspool - TCP 库使用工作池来提高性能并保护您的服务器。
utp - 围棋 UTP 微传输协议的实现。
water - 简单的 TUN / TAP 库。
webrtc - WebRTC API 的纯 Go 实现。
winrm - 进入 WinRM 客户端以在 Windows 计算机上远程执行命令。
xtcp - 具有同步全双工通信,安全关闭,自定义协议的 TCP Server Framework。
视频
go-astisub - 在 GO 中处理字幕(.srt,.stl,.ttml,.webvtt,.ssa / .ass,图文电视,.smi 等)。
go-astits - 在 GO 中本地解析和解复用 MPEG 传输流(.ts)。
go-m3u8 - Apple m3u8 播放列表的解析器和生成器库。
goav - FFmpeg 的综合 Go 绑定。
gst - GStreamer 的绑定。
libgosubs - go 的字幕格式支持。支持.srt,.ttml 和.ass。
libvlc-go - libvlc 2.X / 3.X / 4.X 的绑定(由 VLC 媒体播放器使用)。
m3u8 - Apple HLS 的 M3U8 播放列表的解析器和生成器库。
v4l - 用 Go 编写的 Linux 视频捕获库。
开源书籍
Go palyground - 不用搭建本地 Go 环境,在线就编写 Go 的代码
Go实战开发 - 作者是著名的 Go 开源项目 beego 的作者,他的最佳实践非常值得阅读
Go Web 编程 - 跟前面一本书作者是同一位,讲的是 web 开发
Go语言标准库 - 对标准库的介绍
Go入门指南 - 比较适合新手,内容相对基础一些
Go语言圣经 - 书如其名
Go语言中文网 - 找对圈子,学的更快
菜鸟教程 - 这个网站非常适合快速上手某门语言
Go语言高级编程 - 内容适合进阶
go语言原本 - 欧神出品,虽然号称进度只有 9.9%/100%,但不妨碍它的优秀,值得一看
golang设计模式 - 设计模式 Golang 实现,《研磨设计模式》的 golang 实现
Go语言四十二章经 - 可以对比查漏补缺
视频网课
关注公众号 回复【教程】即可在知识的海洋里呛水。
版权声明: 本文为 InfoQ 作者【9號】的原创文章。
原文链接:【http://xie.infoq.cn/article/6dea371ed64d1d764a5d5a57b】。
本文遵守【CC BY-ND】协议,转载请保留原文出处及本版权声明。
评论