# go-demo **Repository Path**: we452366/go-demo ## Basic Information - **Project Name**: go-demo - **Description**: go语言学习练习 - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-05-12 - **Last Updated**: 2022-08-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # go语言练习 这是基于 [《go语言圣经》](https://books.studygolang.com/gopl-zh/) 中相关内容的一些练习和实践,旨在提升对go语言相关特性的了解和熟悉 ## 入门 ### Hello, World ### 命令行参数 ### 查找重复的行 ### GIF动画 ### 获取URL ### 并发获取多个URL ### Web服务 ### 本章要点 ## 程序结构 ### 命名 ### 声明 ### 变量 ### 赋值 ### 类型 ### 包和文件 ### 作用域 ## 基础数据类型 ### 整型 ### 浮点数 ![surface](./surface.svg) [surface.go](./surface.go) ### 复数 ![mandelbrot](./mandelbrot.png) [mandelbrot.go](./mandelbrot.go) ### 布尔型 ### 字符串 [printints.go](./printints.go) ### 常量 [netflag.go](./netflag.go) ## 复合数据类型 ### 数组 ### Slice [reverse.go](./reverse.go) ### Map [charcount.go](./charcount.go) ### 结构体 [treesort.go](./treesort.go) ### JSON [json.go](./json.go) ### 文本和HTML模板 [autoescape.go](./autoescape.go) ## 函数 ### 函数声明 ### 递归 ### 多返回值 ### 错误 ### 函数值 ### 匿名函数 [squares.go](./squares.go) ### 可变参数 ### Deferred函数 ### Panic异常 ### Recover捕获异常 ## 方法 ### 方法声明 ### 基于指针对象的方法 ### 通过嵌入结构体来扩展类型 ### 方法值和方法表达式 ### 封装 ## 接口 ### 接口是合约 ### 接口类型 ### 实现接口的条件 ### flag.Value接口 ### 接口值 ### sort.Interface接口 ### http.Handler接口 ### error接口 ### 示例:表达式求值 ### 类型断言 ### 基于类型断言识别错误类型 ### 通过类型断言查询接口 ### 通过类型断言查询接口 ### 类型分支 ### 示例:基于标记的XML解码 [xmlselect.go](./xmlselect.go) ### 补充几点 ## Goroutines和Channels ### Goroutines [spinner.go](./spinner.go) ### 示例:并发的Clock服务 [clock.go](./clock.go) [netcat.go](./xmlselect.go) ### 示例:并发的Echo服务 ### Channels [pipeline.go](./pipeline.go) ### 并发的循环 ### 示例:并发的Web爬虫 ### 基于select的多路复用 ### 示例:并发的目录遍历 [du.go](./du.go) ### 并发的退出 ### 示例:聊天服务 ## 基于共享变量的并发 ### 竞争条件 ### sync.Mutex互斥锁 ### sync.RWMutex读写锁 ### 内存同步 ### sync.Once惰性初始化 ### 竞争条件检测 ### 示例:并发的非阻塞缓存 ### Goroutine和线程 ## 包和工具 ### 包简介 ### 导入路径 ### 包声明 ### 导入声明 ### 包的匿名导入 ### 包和命名 ### 工具 ## 测试 ### go test ### 测试函数 ### 测试覆盖率 ### 基准测试 ### 剖析 ### 示例函数 ## 反射 ### 为何需要反射 ### reflect.Type和reflect.Value [format.go](./format.go) ### Display递归打印 ### 示例:编码S表达式 ### 通过reflect.Value修改值 ### 示例:编码S表达式 ### 获取结构体字段标签 ### 显示一个类型的方法集 ### 几点忠告