{"version":1,"pages":[{"id":"-Lk9G9uBecoLxzqzgro3","title":"Introduction","pathname":"/golang","siteSpaceId":"sitesp_eZWE8","description":""},{"id":"-Lk9IBqgG3Ico2D7TVM2","title":"第1课 杂谈","pathname":"/golang/di-1-ke-za-tan","siteSpaceId":"sitesp_eZWE8","description":""},{"id":"-Lk9IBqwj8s6hwzqFPVZ","title":"1.1 聊一聊，Go 的相对路径问题","pathname":"/golang/di-1-ke-za-tan/golang-relatively-path","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第1课 杂谈"}]},{"id":"-Lk9IBqy1tyNVitID_Ob","title":"1.2 Go 的 fake-useragent 了解一下","pathname":"/golang/di-1-ke-za-tan/go-fake-useragent","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第1课 杂谈"}]},{"id":"-Lk9IBqzEapq7d-pv_ZH","title":"1.3 用 Go 来了解一下 Redis 通讯协议","pathname":"/golang/di-1-ke-za-tan/go-redis-protocol","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第1课 杂谈"}]},{"id":"-Lk9IBr-5bOCpBNek4uo","title":"1.4 使用 Gomock 进行单元测试","pathname":"/golang/di-1-ke-za-tan/gomock","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第1课 杂谈"}]},{"id":"-Lk9IBr0cCsb6Z70SKc6","title":"1.5 在 Go 中恰到好处的内存对齐","pathname":"/golang/di-1-ke-za-tan/go-memory-align","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第1课 杂谈"}]},{"id":"-Lk9IBr1i3KwY3OIxFZ2","title":"1.6 来，控制一下 goroutine 的并发数量","pathname":"/golang/di-1-ke-za-tan/control-goroutine","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第1课 杂谈"}]},{"id":"-Lk9IBr2YJTojgpW7md0","title":"1.7 for-loop 与 json.Unmarshal 性能分析概要","pathname":"/golang/di-1-ke-za-tan/for-loop-json-unmarshal","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第1课 杂谈"}]},{"id":"-Lk9IBr3kLj5emT-qQTp","title":"1.8 简单围观一下有趣的 //go: 指令","pathname":"/golang/di-1-ke-za-tan/go-ins","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第1课 杂谈"}]},{"id":"-Lk9IBr4yxcrLmTuPt3I","title":"1.9 我要在栈上。不，你应该在堆上","pathname":"/golang/di-1-ke-za-tan/stack-heap","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第1课 杂谈"}]},{"id":"-Lk9IBr5hqLl2TQoa8bd","title":"1.10 defer 会有性能损耗，尽量不要用","pathname":"/golang/di-1-ke-za-tan/defer-loss","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第1课 杂谈"}]},{"id":"-Lk9IBr6jrqxKWJi7Obe","title":"1.11 从实践到原理，带你参透 gRPC","pathname":"/golang/di-1-ke-za-tan/talking-grpc","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第1课 杂谈"}]},{"id":"-Lo9HJbTOXa5ZS0wT203","title":"1.12 Go1.13 defer 的性能是如何提高的？","pathname":"/golang/di-1-ke-za-tan/go1.13-defer","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第1课 杂谈"}]},{"id":"-LpGpy-haPPo9QFC--b1","title":"1.13 Go 应用内存占用太多，让排查？（VSZ篇）","pathname":"/golang/di-1-ke-za-tan/why-vsz-large","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第1课 杂谈"}]},{"id":"-LpqLQdHZRDgpNs7HQvJ","title":"1.14 干货满满的 Go Modules 和 goproxy.cn","pathname":"/golang/di-1-ke-za-tan/goproxy-cn","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第1课 杂谈"}]},{"id":"-Lk9IBr7pyGvAk6oQ_sN","title":"第2课 包管理","pathname":"/golang/di-2-ke-bao-guan-li","siteSpaceId":"sitesp_eZWE8","description":""},{"id":"-Lk9IBr8kviHA38fUaOm","title":"2.1 Go依赖管理工具dep","pathname":"/golang/di-2-ke-bao-guan-li/dep","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第2课 包管理"}]},{"id":"-Lk9IBr9gljL8HFxEAhm","title":"2.2 如此，用dep获取私有库","pathname":"/golang/di-2-ke-bao-guan-li/dep-private","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第2课 包管理"}]},{"id":"-Lk9IBrAkS-f4AnRiXe7","title":"第3课 gin","pathname":"/golang/di-3-ke-gin","siteSpaceId":"sitesp_eZWE8","description":""},{"id":"-Lk9IBrBLTwcfe_2yjr6","title":"3.1 Golang 介绍与环境安装","pathname":"/golang/di-3-ke-gin/install","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第3课 gin"}]},{"id":"-Lk9IBrCkL50A85CTgKf","title":"3.2 Gin搭建Blog API's （一）","pathname":"/golang/di-3-ke-gin/api-01","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第3课 gin"}]},{"id":"-Lk9IBrDmdyCCER9fHc2","title":"3.3 Gin搭建Blog API's （二）","pathname":"/golang/di-3-ke-gin/api-02","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第3课 gin"}]},{"id":"-Lk9IBrEX6l25YsVw9iS","title":"3.4 Gin搭建Blog API's （三）","pathname":"/golang/di-3-ke-gin/api-03","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第3课 gin"}]},{"id":"-Lk9IBrFjIYkjkVs7ie5","title":"3.5 使用JWT进行身份校验","pathname":"/golang/di-3-ke-gin/jwt","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第3课 gin"}]},{"id":"-Lk9IBrGFG1WPvW5yIFb","title":"3.6 编写一个简单的文件日志","pathname":"/golang/di-3-ke-gin/log","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第3课 gin"}]},{"id":"-Lk9IBrHba32WholKoAT","title":"3.7 优雅的重启服务","pathname":"/golang/di-3-ke-gin/reload-http","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第3课 gin"}]},{"id":"-Lk9IBrITHlGUSA994Em","title":"3.8 为它加上Swagger","pathname":"/golang/di-3-ke-gin/swagger","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第3课 gin"}]},{"id":"-Lk9IBrJcR0ZHQ-4gs39","title":"3.9 将Golang应用部署到Docker","pathname":"/golang/di-3-ke-gin/golang-docker","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第3课 gin"}]},{"id":"-Lk9IBrKewUMbgcJhf1T","title":"3.10 定制 GORM Callbacks","pathname":"/golang/di-3-ke-gin/gorm-callback","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第3课 gin"}]},{"id":"-Lk9IBrLLxdqpj5-1iMi","title":"3.11 Cron定时任务","pathname":"/golang/di-3-ke-gin/cron","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第3课 gin"}]},{"id":"-Lk9IBrMnTF84p9SHIYJ","title":"3.12 优化配置结构及实现图片上传","pathname":"/golang/di-3-ke-gin/config-upload","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第3课 gin"}]},{"id":"-Lk9IBrNODwSa6JyzwT4","title":"3.13 优化你的应用结构和实现Redis缓存","pathname":"/golang/di-3-ke-gin/application-redis","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第3课 gin"}]},{"id":"-Lk9IBrOiAQ8IQ4SLaxl","title":"3.14 实现导出、导入 Excel","pathname":"/golang/di-3-ke-gin/excel","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第3课 gin"}]},{"id":"-Lk9IBrPh_A2eJu05iaq","title":"3.15 生成二维码、合并海报","pathname":"/golang/di-3-ke-gin/image","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第3课 gin"}]},{"id":"-Lk9IBrQZ1sNxGwZqAdo","title":"3.16 在图片上绘制文字","pathname":"/golang/di-3-ke-gin/font","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第3课 gin"}]},{"id":"-Lk9IBrR8U3FwhawVEPw","title":"3.17 用Nginx部署Go应用","pathname":"/golang/di-3-ke-gin/nginx","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第3课 gin"}]},{"id":"-Lk9IBrSAFaNcZEVoMoF","title":"3.18 Golang交叉编译","pathname":"/golang/di-3-ke-gin/cgo","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第3课 gin"}]},{"id":"-Lk9IBrTPkRLrW5WICcy","title":"3.19 请入门 Makefile","pathname":"/golang/di-3-ke-gin/makefile","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第3课 gin"}]},{"id":"-Lk9IBrUzDjnFWmr6RLb","title":"第4课 grpc","pathname":"/golang/di-4-ke-grpc","siteSpaceId":"sitesp_eZWE8","description":""},{"id":"-Lk9IBrVCZWkgqeFi32r","title":"4.1 gRPC及相关介绍","pathname":"/golang/di-4-ke-grpc/install","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第4课 grpc"}]},{"id":"-Lk9IBrWpSomqbcnjEFB","title":"4.2 gRPC Client and Server","pathname":"/golang/di-4-ke-grpc/client-and-server","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第4课 grpc"}]},{"id":"-Lk9IBrXZEzb8H-gkYrj","title":"4.3 gRPC Streaming, Client and Server","pathname":"/golang/di-4-ke-grpc/stream-client-server","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第4课 grpc"}]},{"id":"-Lk9IBrYlkMRbdhg3_5O","title":"4.4 TLS 证书认证","pathname":"/golang/di-4-ke-grpc/grpc-tls","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第4课 grpc"}]},{"id":"-Lk9IBrZTgWe7DWJ3RrJ","title":"4.5 基于 CA 的 TLS 证书认证","pathname":"/golang/di-4-ke-grpc/ca-tls","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第4课 grpc"}]},{"id":"-Lk9IBr_Ph63W7WqT78b","title":"4.6 Unary and Stream interceptor","pathname":"/golang/di-4-ke-grpc/interceptor","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第4课 grpc"}]},{"id":"-Lk9IBrazDGZa2Hb8xMe","title":"4.7 让你的服务同时提供 HTTP 接口","pathname":"/golang/di-4-ke-grpc/grpc-http","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第4课 grpc"}]},{"id":"-Lk9IBrbUNPGSLqDXQO0","title":"4.8 对 RPC 方法做自定义认证","pathname":"/golang/di-4-ke-grpc/per-rpc-credentials","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第4课 grpc"}]},{"id":"-Lk9IBrcc0YPHum9yzm0","title":"4.9 gRPC Deadlines","pathname":"/golang/di-4-ke-grpc/deadlines","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第4课 grpc"}]},{"id":"-Lk9IBrdC1CvziLbsGR0","title":"4.10 分布式链路追踪","pathname":"/golang/di-4-ke-grpc/zipkin","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第4课 grpc"}]},{"id":"-Lk9IBreV2BjniUL9Ev8","title":"第5课 grpc-gateway","pathname":"/golang/di-5-ke-grpcgateway","siteSpaceId":"sitesp_eZWE8","description":""},{"id":"-Lk9IBrf4rjEKLyyGh7r","title":"5.1 介绍与环境安装","pathname":"/golang/di-5-ke-grpcgateway/install","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第5课 grpc-gateway"}]},{"id":"-Lk9IBrgdUq5G9-KSaN0","title":"5.2 Hello World","pathname":"/golang/di-5-ke-grpcgateway/hello-world","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第5课 grpc-gateway"}]},{"id":"-Lk9IBrhDupMcBnq6Gje","title":"5.3 Swagger了解一下","pathname":"/golang/di-5-ke-grpcgateway/swagger","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第5课 grpc-gateway"}]},{"id":"-Lk9IBriSX0A43_Bp-hT","title":"5.4 能不能不用证书？","pathname":"/golang/di-5-ke-grpcgateway/grpc-gateway-tls","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第5课 grpc-gateway"}]},{"id":"-Lk9IBrj0Qreq5G7MBSx","title":"第6课 常用关键字","pathname":"/golang/di-6-ke-chang-yong-guan-jian-zi","siteSpaceId":"sitesp_eZWE8","description":""},{"id":"-Lk9IBrkkHIKrhUJ_04m","title":"6.1 panic and recover","pathname":"/golang/di-6-ke-chang-yong-guan-jian-zi/panic-and-recover","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第6课 常用关键字"}]},{"id":"-Lk9IBrlp2fhbG9Ah626","title":"6.2 defer","pathname":"/golang/di-6-ke-chang-yong-guan-jian-zi/defer","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第6课 常用关键字"}]},{"id":"-Lk9IBrmCdfG6aGREaIk","title":"第7课 数据结构","pathname":"/golang/di-7-ke-shu-ju-jie-gou","siteSpaceId":"sitesp_eZWE8","description":""},{"id":"-Lk9IBrn_Andpo8iSzWS","title":"7.1 slice","pathname":"/golang/di-7-ke-shu-ju-jie-gou/slice","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第7课 数据结构"}]},{"id":"-Lk9IBro9EoLKxl27vDu","title":"7.2 slice：最大容量大小是怎么来的","pathname":"/golang/di-7-ke-shu-ju-jie-gou/why-slice-max","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第7课 数据结构"}]},{"id":"-Lk9IBrpOgTKI7udftsQ","title":"7.3 map：初始化和访问元素","pathname":"/golang/di-7-ke-shu-ju-jie-gou/map-access","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第7课 数据结构"}]},{"id":"-Lk9IBrqBMxF4YEWmQBf","title":"7.4 map：赋值和扩容迁移","pathname":"/golang/di-7-ke-shu-ju-jie-gou/map-assign","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第7课 数据结构"}]},{"id":"-Lk9IBrrErZgZaDl2J50","title":"7.5 map：为什么遍历 map 是无序的","pathname":"/golang/di-7-ke-shu-ju-jie-gou/why-map-no-order","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第7课 数据结构"}]},{"id":"-Lk9IBrsuoI-16pr7H-3","title":"第8课 标准库","pathname":"/golang/di-8-ke-biao-zhun-ku","siteSpaceId":"sitesp_eZWE8","description":""},{"id":"-Lk9IBrtNS8feo01nQah","title":"8.1 fmt","pathname":"/golang/di-8-ke-biao-zhun-ku/fmt","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第8课 标准库"}]},{"id":"-Lk9IBruHFK6Z5eXw8cO","title":"8.2 log","pathname":"/golang/di-8-ke-biao-zhun-ku/log","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第8课 标准库"}]},{"id":"-LkDWFWrWrUXsMLVH7JZ","title":"8.3 unsafe","pathname":"/golang/di-8-ke-biao-zhun-ku/unsafe","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第8课 标准库"}]},{"id":"-Lk9IBrv8YG4pT5YWJi2","title":"第9课 工具","pathname":"/golang/di-9-ke-gong-ju","siteSpaceId":"sitesp_eZWE8","description":""},{"id":"-Lk9IBrwtfMbJLbFxoyW","title":"9.1 Go 大杀器之性能剖析 PProf","pathname":"/golang/di-9-ke-gong-ju/go-tool-pprof","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第9课 工具"}]},{"id":"-Lk9IBrxNYUe2b6Gzs93","title":"9.2 Go 大杀器之跟踪剖析 trace","pathname":"/golang/di-9-ke-gong-ju/go-tool-trace","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第9课 工具"}]},{"id":"-LmYIqMLiS__MEvCT2D6","title":"9.3 用 GODEBUG 看调度跟踪","pathname":"/golang/di-9-ke-gong-ju/godebug-sched","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第9课 工具"}]},{"id":"-Lnh-gtSN73neW_9i_A3","title":"9.4 用 GODEBUG 看GC","pathname":"/golang/di-9-ke-gong-ju/godebug-gc","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第9课 工具"}]},{"id":"-Lk9IBryxHI4Bpd-f-aJ","title":"第10课 爬虫","pathname":"/golang/di-10-ke-pa-chong","siteSpaceId":"sitesp_eZWE8","description":""},{"id":"-Lk9IBrzRoDHYQcjeavc","title":"9.1 爬取豆瓣电影 Top250","pathname":"/golang/di-10-ke-pa-chong/douban-top250","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第10课 爬虫"}]},{"id":"-Lk9IBs-nYRo6JLmtOHc","title":"9.2 爬取汽车之家 二手车产品库","pathname":"/golang/di-10-ke-pa-chong/cars","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第10课 爬虫"}]},{"id":"-Lk9IBs0RYYV2BVITnnC","title":"9.3 了解一下Golang的市场行情","pathname":"/golang/di-10-ke-pa-chong/go2018","siteSpaceId":"sitesp_eZWE8","description":"","breadcrumbs":[{"label":"第10课 爬虫"}]}]}