{"id":15095916,"url":"https://github.com/jincheng9/go-tutorial","last_synced_at":"2025-07-16T03:47:26.865Z","repository":{"id":37388124,"uuid":"418816813","full_name":"jincheng9/go-tutorial","owner":"jincheng9","description":"Go learning materials，涵盖基础、中级和高级教程","archived":false,"fork":false,"pushed_at":"2023-08-10T05:33:22.000Z","size":16090,"stargazers_count":1180,"open_issues_count":4,"forks_count":177,"subscribers_count":13,"default_branch":"main","last_synced_at":"2025-04-06T02:51:09.308Z","etag":null,"topics":["blog","book","cheat-sheets","database","gin","go","golang","news","notes","tutorial","video","web","wechat"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jincheng9.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-10-19T07:29:13.000Z","updated_at":"2025-04-05T09:09:51.000Z","dependencies_parsed_at":"2024-06-19T00:24:54.118Z","dependency_job_id":null,"html_url":"https://github.com/jincheng9/go-tutorial","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jincheng9/go-tutorial","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jincheng9%2Fgo-tutorial","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jincheng9%2Fgo-tutorial/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jincheng9%2Fgo-tutorial/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jincheng9%2Fgo-tutorial/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jincheng9","download_url":"https://codeload.github.com/jincheng9/go-tutorial/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jincheng9%2Fgo-tutorial/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265479886,"owners_count":23773631,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blog","book","cheat-sheets","database","gin","go","golang","news","notes","tutorial","video","web","wechat"],"created_at":"2024-09-25T15:43:44.665Z","updated_at":"2025-07-16T03:47:26.819Z","avatar_url":"https://github.com/jincheng9.png","language":"Go","readme":"# Learning notes for golang\n\n如果发现了本项目里的问题或者想了解本项目里还没涉及到的go语言技术栈，欢迎提交[issue](https://github.com/jincheng9/go-tutorial/issues/new)。\n\n如果觉得本项目不错，欢迎给个**Star**。\n\n## 基础篇\n\n* [lesson0: GitHub最流行的golang-cheat-sheet中文版本](https://github.com/jincheng9/golang-cheat-sheet-cn)\n\n* [lesson1: Go程序结构](./workspace/lesson1)\n\n* [lesson2: 数据类型：数字，字符串，bool](./workspace/lesson2)\n\n* [lesson3: 变量类型定义：全局变量，局部变量，多变量，零值](./workspace/lesson3)\n\n* [lesson4: 常量和枚举](./workspace/lesson4)\n\n* [lesson5: 运算操作符](./workspace/lesson5)\n\n* [lesson6: 控制语句if/switch](./workspace/lesson6)\n\n* [lesson7: 循环语句for/goto/break/continue](./workspace/lesson7)\n\n* [lesson8: 函数，闭包和方法](./workspace/lesson8)\n\n* [lesson9: 变量作用域](./workspace/lesson9)\n\n* [lesson10: 数组：一维数组和多维数组](./workspace/lesson10)\n\n* [lesson11: 指针pointer](./workspace/lesson11)\n\n* [lesson12: 结构体struct](./workspace/lesson12)\n\n* [lesson13: 切片Slice](./workspace/lesson13)\n\n* [lesson14: range迭代](./workspace/lesson14)\n\n* [lesson15: map集合](./workspace/lesson15)\n\n* [lesson16: 递归函数](./workspace/lesson16)\n\n* [lesson17: 类型转换](./workspace/lesson17)\n\n* [lesson18: 接口interface](./workspace/lesson18)\n\n* [lesson19: 协程goroutine和管道channel](./workspace/lesson19)\n\n* [lesson20: defer语义](./workspace/lesson20)\n\n* [lesson21: 并发编程之sync.WaitGroup](./workspace/lesson21)\n\n* [lesson22:  并发编程之sync.Once](./workspace/lesson22)\n\n* [lesson23:  并发编程之sync.Mutex和sync.RWMutex](./workspace/lesson23)\n\n* [lesson24: 并发编程之sync.Cond](./workspace/lesson24)\n\n* [lesson25: 并发编程之sync.Map](./workspace/lesson25)\n\n* [lesson26: 并发编程之原子操作sync/atomic](./workspace/lesson26)\n\n* [lesson27: 包Package和模块Module](./workspace/lesson27)\n\n* [lesson28: panic, recover运行期错误处理](./workspace/lesson28)\n\n* [lesson29: select语义](./workspace/lesson29)\n\n* [lesson30: go单元测试](./workspace/lesson30)\n\n* [lesson31: go性能测试](./workspace/lesson31)\n\n* [lesson32: go模糊测试](./workspace/senior/p22)\n\n  \n\n\n## 进阶篇\n\n* 常用关键字\n\n  * [被defer的函数一定会执行么？](./workspace/senior/p2)\n  * [new和make的使用区别和最佳实践是什么？](./workspace/senior/p4)\n  * [receive-only channel和send-only channel的争议](./workspace/senior/p30)\n* 语言基础\n  * [Go有引用变量和引用传递么？map,channel和slice作为函数参数是引用传递么？](./workspace/senior/p3)\n  * [一文读懂Go匿名结构体的使用场景](./workspace/senior/p5)\n  * [Go语言中fmt.Println(true)的结果一定是true么？](./workspace/senior/p19)\n  * [Go语言中命名函数参数和命名函数返回值的注意事项](./workspace/senior/p21)\n* 并发编程\n  * [Go语言中Context并发模式](./workspace/senior/p31/01-go-context.md)\n* 泛型\n  * [泛型：Go泛型入门官方教程](./workspace/senior/p6)\n  * [泛型：一文读懂Go泛型设计和使用场景](./workspace/senior/p7)\n  * [泛型：Go 1.18正式版本将从标准库中移除constraints包](./workspace/senior/p17)\n  * [泛型：什么场景应该使用泛型](./workspace/official-blog/when-to-use-generics.md)\n* Fuzzing\n  * [Fuzzing: Go Fuzzing入门官方教程](./workspace/senior/p22)\n  * [Fuzzing: 一文读懂Go Fuzzing使用和原理](./workspace/senior/p23)\n* Workspace mode工作区模式\n  * [Go 1.18：工作区模式workspace mode简介](./workspace/senior/p25)\n  * [Go 1.18：工作区模式最佳实践](./workspace/official-blog/go1.18-workspace-best-practice.md)\n* 语言规范\n  * [Practical Go：如何写出更好维护的Go代码](https://github.com/jincheng9/practical-go-cn)\n  * [Google的Go语言编码规范](./workspace/style/google.md)\n* Go开发中的常见错误\n  * [第1篇：go未知枚举值](./workspace/senior/p28/01-unknown-enum-value.md)\n  * [第2篇：go benchmark性能测试的坑](./workspace/senior/p28/02-go-benchmark-inline.md)\n  * [第3篇：go指针的性能问题和内存逃逸](./workspace/senior/p28/03-go-pointer.md)\n  * [第4篇：for/switch和for/select做break操作退出的注意事项](./workspace/senior/p28/04-break-for-switch-select.md)\n  * [第5篇：go语言Error管理](./workspace/senior/p28/05-go-error-management.md)\n  * [第6篇：slice初始化常犯的错误](./workspace/senior/p28/06-go-slice-init.md)\n  * [第7篇：不使用-race选项做并发竞争检测](./workspace/senior/p28/07-go-race-detector.md)\n  * [第8篇：并发编程中Context使用常见错误](./workspace/senior/p28/08-go-context-management.md)\n  * [第9篇：使用文件名称作为函数输入](./workspace/senior/p28/09-go-use-filename-as-input.md)\n  * [第10篇：Goroutine和循环变量一起使用的坑](./workspace/senior/p28/10-go-goroutine-loop-var.md)\n  * [第11篇：意外的变量遮蔽(variable shadowing)](./workspace/senior/p28/11-go-unintended-variable-shadowing.md)\n  * [第12篇：冗余的嵌套代码](./workspace/senior/p28/12-go-unnecessary-nested-code.md)\n  * [第13篇：init函数的常见错误和最佳实践](./workspace/senior/p28/13-go-package-init-function.md)\n  * [第14篇：过度使用getter和setter方法](./workspace/senior/p28/14-go-overuse-getter-setter.md)\n  * [第15篇：interface使用的常见错误和最佳实践](./workspace/senior/p28/15-go-interface-pollution.md)\n  * [第16篇：any的常见错误和最佳实践](./workspace/senior/p28/16-any-keyword.md)\n* 高性能Go\n  * [一文读懂Go 1.20引入的PGO性能优化](./workspace/senior/p35)\n  * [high performance go workshop](https://dave.cheney.net/high-performance-go-workshop/dotgo-paris.html)\n  \n* Go安全\n  * [Go的全新安全漏洞检测工具govulncheck来了](./workspace/senior/p32/01-go-vulnerability-management.md)\n* Go版本演进\n  * [Go 1.19要来了，看看都有哪些变化：第1篇](./workspace/senior/p29/readme.md)\n  * [Go 1.19要来了，看看都有哪些变化：第2篇](./workspace/senior/p29/readme2.md)\n  * [Go 1.19要来了，看看都有哪些变化：第3篇](./workspace/senior/p29/readme3.md)\n  * [Go 1.19要来了，看看都有哪些变化：第4篇](./workspace/senior/p29/readme4.md)\n  * [Go 1.20要来了，看看都有哪些变化：第1篇](./workspace/senior/p33/readme.md)\n  * [Go 1.20要来了，看看都有哪些变化：第2篇](./workspace/senior/p33/readme2.md)\n  * [Go 1.20要来了，看看都有哪些变化：第3篇](./workspace/senior/p33/readme3.md)\n  * [Go 1.20要来了，看看都有哪些变化：第4篇](./workspace/senior/p33/readme4.md)\n  * [Go 1.21的2个语言变化](./workspace/senior/p34)\n\n\n\n\n## Go Quiz\n\n1. [Go Quiz: 从Go面试题看slice的底层原理和注意事项](./workspace/senior/p8)\n\n2. [Go Quiz: 从Go面试题搞懂slice range遍历的坑](./workspace/senior/p13)\n\n3. [Go Quiz: 从Go面试题看channel的注意事项](./workspace/senior/p9)\n\n4. [Go Quiz: 从Go面试题看channel在select场景下的注意事项](./workspace/senior/p14)\n\n5. [Go Quiz: 从Go面试题看分号规则和switch的注意事项](./workspace/senior/p10)\n\n6. [Go Quiz: 从Go面试题看defer语义的底层原理和注意事项第1篇](./workspace/senior/p11)\n\n7. [Go Quiz: 从Go面试题看defer的注意事项第2篇](./workspace/senior/p12)\n\n8. [Go Quiz: 从Go面试题看defer的注意事项第3篇](./workspace/senior/p15)\n\n9. [Go Quiz: Google工程师的Go语言题目](./workspace/senior/p16)\n\n10. [Go Quiz: 从Go面试题看panic注意事项第1篇](./workspace/senior/p18)\n\n10. [Go Quiz: 从Go面试题看recover注意事项第1篇](./workspace/senior/p18/readme2.md)\n\n9. [Go Quiz: 从Go面试题看函数命名返回值的注意事项](./workspace/senior/p20)\n\n9. [Go Quiz: 从Go面试题看锁的注意事项](./workspace/senior/p24)\n\n9. [Go Quiz: 从Go面试题看变量的零值和初始化赋值的注意事项](./workspace/senior/p26)\n\n9. [Go Quiz: 从Go面试题看数值类型的自动推导](./workspace/senior/p27)\n\n12. [Go questions-golang.design](https://golang.design/go-questions/)\n\n    \n\n##  Go标准库\n\n* [Go标准库脑图](./workspace/img/go-std-lib-mindmap.png)\n\n* [Go标准库之log使用详解](./workspace/std/01)\n\n* [Go标准库之cmd命令使用详解](./workspace/std/02)\n\n  \n\n## 实战篇\n\n### 代码规范\n\n* [Google的Go语言编码规范](./workspace/style/google.md)\n* [Practical Go中文版本](https://github.com/jincheng9/practical-go-cn)\n* [Go谚语 by  Rob Pike](https://go-proverbs.github.io/)\n\n### Web框架\n\n#### Gin\n\n* [当前流行的Go web框架比较以及Gin介绍](./workspace/gin/01/)\n* [Gin源码结构解析](./workspace/gin/02)\n\n### RPC\n\n#### gRPC\n\n* [gRPC入门指引](./workspace/rpc/01)\n* [gRPC-Go入门教程](./workspace/rpc/02)\n\n### Databases\n\n#### MySQL\n\n* [Tutorial of go-sql-driver/mysql](./workspace/mysql/01/)\n\n#### Redis\n\n* [Tutorial of go-redis/redis](./workspace/redis/01/)\n\n### Docker/K8s\n\n* [Docker入门教程101: 用途，架构，安装和使用](https://github.com/jincheng9/disributed-system-notes/tree/main/docker/01)\n* [Docker入门教程101: 基于Docker部署Go项目](https://github.com/jincheng9/disributed-system-notes/tree/main/docker/02)\n\n### Document Tools\n\n#### Swagger\n\n* [gin-swagger常见问题](./workspace/swagger)\n\n## CI/CD\n\n- [Jenkins教程01：安装部署](./workspace/devops/jenkins01.md)\n\n  \n\n## 外文翻译\n\n1. [GitHub最流行的golang-cheat-sheet中文版本](https://github.com/jincheng9/golang-cheat-sheet-cn)\n\n1. [官方博文：Go开源13周年](./workspace/official-blog/13-years-of-go.md)\n\n1. [官方博文：Go开发者调研方式改变了](./workspace/official-blog/survey-change.md)\n\n1. [官方博文：什么场景应该使用泛型](./workspace/official-blog/when-to-use-generics.md)\n\n1. [官方博文：Go工作区模式最佳实践](./workspace/official-blog/go1.18-workspace-best-practice.md)\n\n1. [官方博文：Go 1.18发布啦！](./workspace/official-blog/go118_release.md)\n\n1. [官方教程：Go fuzzing模糊测试](./workspace/senior/p22)\n\n2. [官方教程：Go泛型入门](./workspace/senior/p6)\n\n2. [官方博文：Go 1.18 Beta 2发布](./workspace/official-blog/go118_beta2.md)\n\n2. [官方博文：Go官方推出了Go 1.18的2个新教程](./workspace/official-blog/go118_two_new_tutorial.md)\n\n3. [官方博文：支持泛型的Go 1.18 Beta 1版本正式发布](./workspace/official-blog/go118beta1.md)\n\n4. [官方博文：Go开源12周年](./workspace/official-blog/twelve-years-of-go.md)\n\n   \n\n## Go环境和工具\n\n1. [GitHub上的项目go get连不上怎么办？](./workspace/senior/p1/)\n\n2. [GoLand常用快捷键](./workspace/senior/p1/readme2.md)\n\n2. [Mac的shell切换、环境变量设置以及软件安装问题](./workspace/senior/p1/readme3.md)\n\n2. [Go testing缓存导致测试没执行的问题](./workspace/senior/p1/readme4.md)\n\n2. [go install安装的不同Go版本的可执行程序和源码存放在哪里](./workspace/senior/p1/readme5.md)\n\n2. [Mac系统查看Go开发相关的系统设置](./workspace/senior/p1/readme6.md)\n\n   \n\n## Go Book\n\n* [The Go Programming Language-Go语言圣经](http://www.gopl.io/)\n* [Go语言高级编程-chai2010.gitbooks.io](https://chai2010.gitbooks.io/advanced-go-programming-book/content/)\n* [Go语言设计与实现-draveness.me](https://draveness.me/golang/)\n* [Go设计模式-Tamer Tas@google](https://github.com/tmrts/go-patterns)\n* [深入解析Go-tiancaiamao.gitbooks.io](https://tiancaiamao.gitbooks.io/go-internals/content/zh/)\n* [码农桃花源-qcrao91.gitbook.io](https://qcrao91.gitbook.io/go/)\n* [Go语言高性能编程-geektutu](https://geektutu.com/post/hpg-benchmark.html)\n* [Go Under The Hood-golang.design](https://golang.design/under-the-hood/)\n* [英文Go书籍list](https://github.com/dariubs/GoBooks)\n\n\n\n## Go Blog\n\n* [Jincheng's Blog](https://jincheng9.github.io/)\n* [Russ Cox-Go团队负责人](https://research.swtch.com/)\n* [Go Documentation](https://go.dev/doc/)\n* [Golang GitHub Wiki](https://github.com/golang/go/wiki)\n* [Go By Example](https://gobyexample.com/)\n* [Golang By Example](https://golangbyexample.com/)\n* [CS Professor Nilsson from KTH](https://yourbasic.org/golang/)\n* [John Arundel](https://bitfieldconsulting.com/)\n* [Dave Cheney](https://dave.cheney.net/)\n* [Jaana Dogan-Pricipal Engineer at AWS](https://rakyll.org/about/)\n* [go101.org](https://go101.org/article/101.html)\n* [Valentin Deleplace-Google Engineer](https://medium.com/@val_deleplace)\n* [Jay Conrod-Ex Google Go Team Member](https://jayconrod.com/posts)\n* [Medium: A Journey with Go](https://medium.com/a-journey-with-go)\n* [Teiva Harsanyi-100 Go Mistakes author](https://teivah.github.io/)\n* [Carl M. Johnson.net-Tech Director of Spotlight PA](https://carlmjohnson.net/)\n* [Alex Edwards-A full stack Web Developer](https://www.alexedwards.net/blog)\n* [golang.design](https://golang.design/)\n* [Amit Saha-Atlassian Engineer](https://echorand.me/)\n* [Paschalis Tsilias-Grafana Engineer](https://tpaschalis.github.io/)\n* [liwenzhou-李文周](https://www.liwenzhou.com/)\n* [TalkGo发起人-杨文](https://maiyang.me/)\n* [smallest-rpcx作者](https://colobu.com/)\n* [ChangkunOu-欧长坤](https://changkun.de/blog/)\n* [chai2010-柴树杉](https://chai2010.cn/about/)\n* [cch123-曹春晖](https://xargin.com/)\n* [halfrost-Dezhi Yu](https://halfrost.com/)\n* [draveness-左书祺](https://draveness.me/)\n* [unknwon-无闻](https://unknwon.io/)\n* [strikefreedom-Andy Pan](https://strikefreedom.top/)\n* [qcrao-码农桃花源](https://qcrao.com/)\n* [geektutu-极客兔兔](https://geektutu.com/)\n* [topgoer.com](https://www.topgoer.com/)\n* [topgoer.cn](https://topgoer.cn/)\n* [涛叔-taoshu.in](https://taoshu.in/)\n* [jianyu chen](https://eddycjy.com/)\n* [Zhiyun Luo-Tencent IEG Developer](https://www.luozhiyun.com/)\n\n\n\n## Go Video\n\n### YouTube\n\n* [Gopher Academy](https://www.youtube.com/@GopherAcademy)\n\n* [GopherCon Talks Since 2014](https://www.youtube.com/c/GopherAcademy/videos)\n\n* [GoLab Conference Since 2018](https://www.youtube.com/channel/UCMEvzoHTIdZI7IM8LoRbLsQ/featured)\n\n* [Basics, Intermediate, Advanced Go Tutorials-Bitfield Consulting](https://www.youtube.com/c/BitfieldConsulting)\n\n* [TutorialEdge Golang Development](https://www.youtube.com/watch?v=W5b64DXeP0o\u0026list=PLzUGFf4GhXBL4GHXVcMMvzgtO8-WEJIoY)\n\n  \n\n## Go Community\n\n* GoCN： https://github.com/gocn/opentalk\n* Go夜读：https://github.com/talkgo/night\n\n\n\n## Go News\n\n* https://go.dev/blog/\n* https://twitter.com/_rsc\n* https://twitter.com/rob_pike\n* https://twitter.com/golang\n* https://twitter.com/golangweekly\n* https://twitter.com/GolangTrends\n\n\n\n## 微信公众号\n\n* coding进阶：分享Go语言入门、中级到高级教程，以及微服务、云原生架构\n\n  ![coding进阶](./workspace/img/wechat.png)\n\n##   微信赞助\n\n![img](./workspace/img/wechat-payment.png) \n\n## 微信群交流\n\n加我微信，入群交流\n\n![](./workspace/img/wechat-group.png)  \n","funding_links":[],"categories":["Go"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjincheng9%2Fgo-tutorial","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjincheng9%2Fgo-tutorial","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjincheng9%2Fgo-tutorial/lists"}