1. /*******************************************************************************
    2. * Golang CHEATSHEET (中文速查表)
    3. ******************************************************************************/
    4. /******************************************************************************
    5. * Go 编译器命令
    6. *****************************************************************************/
    7. go command [arguments] // go 命令 [参数]
    8. go build // 编译包和依赖包
    9. go clean // 移除对象和缓存文件
    10. go doc // 显示包的文档
    11. go env // 打印go的环境变量信息
    12. go bug // 报告bug
    13. go fix // 更新包使用新的api
    14. go fmt // 格式规范化代码
    15. go generate // 通过处理资源生成go文件
    16. go get // 下载并安装包及其依赖
    17. go install // 编译和安装包及其依赖
    18. go list // 列出所有包
    19. go run // 编译和运行go程序
    20. go test // 测试
    21. go tool // 运行给定的go工具
    22. go version // 显示go当前版本
    23. go vet // 发现代码中可能的错误
    24. /*******************************************************************************
    25. * Hello World
    26. ******************************************************************************/
    27. // main.go
    28. package main // 包名
    29. import "fmt" // 导入fmt包
    30. func main() { // 主函数
    31. fmt.Println("Hello World") // 打印输出
    32. }
    33. // go run main.go // 直接运行
    34. // go build && ./main // 先编译成二进制文件再运行
    35. /*******************************************************************************
    36. * 操作符
    37. ******************************************************************************/
    38. // 算数操作符
    39. + - * / % // 取余
    40. & | ^ &^ // 位与 位或 位异或 位与非
    41. << >> // 左移 右移
    42. // 比较操作
    43. == != // 等于 不等于
    44. < <= // 小于 小于等于
    45. > >= // 大于 大于等于
    46. // 逻辑操作
    47. && || ! // 逻辑与 逻辑或 逻辑非
    48. // 其他
    49. & * <- // 地址 指针引用 通道操作
    50. /*******************************************************************************
    51. * 声明
    52. ******************************************************************************/
    53. a := 1 // 直接给一个未声明的变量赋值
    54. var b int // var 变量名 数据类型 来声明
    55. var c float64
    56. // 注意:使用var声明过的变量不可再使用 := 赋值
    57. a = 2
    58. const d = 1 // 常量
    59. /*******************************************************************************
    60. * 数据类型
    61. ******************************************************************************/
    62. s := "hello" // 字符
    63. a := 1 // int
    64. b := 1.2 // float64
    65. c := 1 + 5i // complex128
    66. // 数组
    67. arr1 := [3]int{4, 5, 6} // 手动指定长度
    68. arr2 := [...]int{1, 2, 3} // 由golang自动计算长度
    69. // 切片
    70. sliceInt := []int{1, 2} // 不指定长度
    71. sliceByte := []byte("hello")
    72. // 指针
    73. a := 1
    74. point := &a // 将a的地址赋给point
    75. /*******************************************************************************
    76. * 流程控制
    77. ******************************************************************************/
    78. // for
    79. i := 10
    80. for i > 0 {
    81. println(i--)
    82. }
    83. // if else
    84. if i == 10 {
    85. println("i == 10")
    86. } else {
    87. println("i != 10")
    88. }
    89. // switch
    90. switch i {
    91. case 10:
    92. println("i == 10")
    93. default:
    94. println("i != 10")
    95. }
    96. /*******************************************************************************
    97. * 函数
    98. ******************************************************************************/
    99. // 以func关键字声明
    100. func test() {}
    101. f := func() {println("Lambdas function")} // 匿名函数
    102. f()
    103. func get() (a,b string) { // 函数多返回值
    104. return "a", "b"
    105. }
    106. a, b := get()
    107. /*******************************************************************************
    108. * 结构体
    109. ******************************************************************************/
    110. // golang中没有class只有struct
    111. type People struct {
    112. Age int // 大写开头的变量在包外可以访问
    113. name string // 小写开头的变量仅可在本包内访问
    114. }
    115. p1 := People{25, "Kaven"} // 必须按照结构体内部定义的顺序
    116. p2 := People{name: "Kaven", age: 25} // 若不按顺序则需要指定字段
    117. // 也可以先不赋值
    118. p3 := new(People)
    119. p3.Age = 25
    120. p3.name = "Kaven"
    121. /*******************************************************************************
    122. * 方法
    123. ******************************************************************************/
    124. // 方法通常是针对一个结构体来说的
    125. type Foo struct {
    126. a int
    127. }
    128. // 值接收者
    129. func (f Foo) test() {
    130. f.a = 1 // 不会改变原来的值
    131. }
    132. // 指针接收者
    133. func (f *Foo) test() {
    134. f.a = 1 // 会改变原值
    135. }
    136. /*******************************************************************************
    137. * go 协程
    138. ******************************************************************************/
    139. go func() {
    140. time.Sleep(10 * time.Second)
    141. println("hello")
    142. }() // 不会阻塞代码的运行 代码会直接向下运行
    143. // channel 通道
    144. c := make(chan int)
    145. // 两个协程间可以通过chan通信
    146. go func() {c <- 1}() // 此时c会被阻塞 直到值被取走前都不可在塞入新值
    147. go func() {println(<-c)}()
    148. // 带缓存的channel
    149. bc := make(chan int, 2)
    150. go func() {c <- 1; c <-2}() // c中可以存储声明时所定义的缓存大小的数据,这里是2个
    151. go func() {println(<-c)}()
    152. /*******************************************************************************
    153. * 接口
    154. ******************************************************************************/
    155. // go的接口为鸭子类型,即只要你实现了接口中的方法就实现了该接口
    156. type Reader interface {
    157. Reading() // 仅需实现Reading方法就实现了该接口
    158. }
    159. type As struct {}
    160. func (a As) Reading() {} // 实现了Reader接口
    161. type Bs struct {}
    162. func (b Bs) Reading() {} // 也实现了Reader接口
    163. func (b Bs) Closing() {}
    164. /*******************************************************************************
    165. * 一些推荐
    166. ******************************************************************************/
    167. // 入门书籍
    168. Go学习笔记》 // 雨痕的
    169. Go语言实战》 // 强烈推荐
    170. // 网上资料
    171. https://github.com/astaxie/build-web-application-with-golang // 谢大的
    172. https://github.com/Unknwon/the-way-to-go_ZH_CN // 无闻
    173. https://github.com/Unknwon/go-fundamental-programming // 无闻教学视频
    174. // 第三方类库
    175. https://golanglibs.com/
    176. // 大杂烩
    177. https://github.com/avelino/awesome-go
    178. /*******************************************************************************
    179. * References
    180. ******************************************************************************/
    181. https://github.com/a8m/go-lang-cheat-sheet
    182. https://github.com/LeCoupa/awesome-cheatsheets