/******************************************************************************* * Golang CHEATSHEET (中文速查表) ******************************************************************************/ /****************************************************************************** * Go 编译器命令 *****************************************************************************/go command [arguments] // go 命令 [参数]go build // 编译包和依赖包go clean // 移除对象和缓存文件go doc // 显示包的文档go env // 打印go的环境变量信息go bug // 报告buggo fix // 更新包使用新的apigo fmt // 格式规范化代码go generate // 通过处理资源生成go文件go get // 下载并安装包及其依赖go install // 编译和安装包及其依赖go list // 列出所有包go run // 编译和运行go程序go test // 测试go tool // 运行给定的go工具go version // 显示go当前版本go vet // 发现代码中可能的错误/******************************************************************************* * Hello World ******************************************************************************/// main.gopackage main // 包名import "fmt" // 导入fmt包func main() { // 主函数 fmt.Println("Hello World") // 打印输出}// go run main.go // 直接运行// go build && ./main // 先编译成二进制文件再运行/******************************************************************************* * 操作符 ******************************************************************************/// 算数操作符+ - * / % // 加 减 乘 除 取余& | ^ &^ // 位与 位或 位异或 位与非<< >> // 左移 右移// 比较操作== != // 等于 不等于< <= // 小于 小于等于> >= // 大于 大于等于// 逻辑操作&& || ! // 逻辑与 逻辑或 逻辑非// 其他& * <- // 地址 指针引用 通道操作/******************************************************************************* * 声明 ******************************************************************************/a := 1 // 直接给一个未声明的变量赋值var b int // var 变量名 数据类型 来声明var c float64// 注意:使用var声明过的变量不可再使用 := 赋值a = 2const d = 1 // 常量/******************************************************************************* * 数据类型 ******************************************************************************/s := "hello" // 字符a := 1 // intb := 1.2 // float64c := 1 + 5i // complex128// 数组arr1 := [3]int{4, 5, 6} // 手动指定长度arr2 := [...]int{1, 2, 3} // 由golang自动计算长度// 切片sliceInt := []int{1, 2} // 不指定长度sliceByte := []byte("hello")// 指针a := 1point := &a // 将a的地址赋给point/******************************************************************************* * 流程控制 ******************************************************************************/// fori := 10for i > 0 { println(i--)}// if elseif i == 10 { println("i == 10")} else { println("i != 10")}// switchswitch i {case 10: println("i == 10")default: println("i != 10")}/******************************************************************************* * 函数 ******************************************************************************/// 以func关键字声明func test() {}f := func() {println("Lambdas function")} // 匿名函数f()func get() (a,b string) { // 函数多返回值 return "a", "b"}a, b := get()/******************************************************************************* * 结构体 ******************************************************************************/// golang中没有class只有structtype People struct { Age int // 大写开头的变量在包外可以访问 name string // 小写开头的变量仅可在本包内访问}p1 := People{25, "Kaven"} // 必须按照结构体内部定义的顺序p2 := People{name: "Kaven", age: 25} // 若不按顺序则需要指定字段// 也可以先不赋值p3 := new(People)p3.Age = 25p3.name = "Kaven"/******************************************************************************* * 方法 ******************************************************************************/// 方法通常是针对一个结构体来说的type Foo struct { a int} // 值接收者func (f Foo) test() { f.a = 1 // 不会改变原来的值} // 指针接收者func (f *Foo) test() { f.a = 1 // 会改变原值}/******************************************************************************* * go 协程 ******************************************************************************/go func() { time.Sleep(10 * time.Second) println("hello")}() // 不会阻塞代码的运行 代码会直接向下运行// channel 通道c := make(chan int)// 两个协程间可以通过chan通信go func() {c <- 1}() // 此时c会被阻塞 直到值被取走前都不可在塞入新值go func() {println(<-c)}()// 带缓存的channelbc := make(chan int, 2)go func() {c <- 1; c <-2}() // c中可以存储声明时所定义的缓存大小的数据,这里是2个go func() {println(<-c)}()/******************************************************************************* * 接口 ******************************************************************************/// go的接口为鸭子类型,即只要你实现了接口中的方法就实现了该接口type Reader interface { Reading() // 仅需实现Reading方法就实现了该接口}type As struct {}func (a As) Reading() {} // 实现了Reader接口type Bs struct {}func (b Bs) Reading() {} // 也实现了Reader接口func (b Bs) Closing() {}/******************************************************************************* * 一些推荐 ******************************************************************************/// 入门书籍《Go学习笔记》 // 雨痕的《Go语言实战》 // 强烈推荐// 网上资料https://github.com/astaxie/build-web-application-with-golang // 谢大的https://github.com/Unknwon/the-way-to-go_ZH_CN // 无闻https://github.com/Unknwon/go-fundamental-programming // 无闻教学视频// 第三方类库https://golanglibs.com/// 大杂烩https://github.com/avelino/awesome-go/******************************************************************************* * References ******************************************************************************/https://github.com/a8m/go-lang-cheat-sheethttps://github.com/LeCoupa/awesome-cheatsheets