From 3476d3f7141ce76ceb3ccf3c16a8bda707fc014a Mon Sep 17 00:00:00 2001 From: chlins Date: Wed, 28 Feb 2018 17:49:52 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0cheatsheets=20golang?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- languages/golang.go | 145 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 languages/golang.go diff --git a/languages/golang.go b/languages/golang.go new file mode 100644 index 0000000..10557f6 --- /dev/null +++ b/languages/golang.go @@ -0,0 +1,145 @@ +/** + * Golang CHEATSHEET (中文速查表) - by chlins (created on 2018/02/14) + * Version: 1, Last Modified: 2018/02/28 16:51 + * https://github.com/skywind3000/awesome-cheatsheets + */ + + +/** + * Hello World + */ +package main + +import "fmt" + +func main() { + fmt.Println("Hello World") +} +// go run main.go + + +/** + * 变量声明 + */ +// 直接使用 := 来给一个未声明的变量赋值 +a := 1 +// 通过 var 变量名 数据类型 来声明 +var a int +a = 1 +// 注意:使用var声明过的变量不可再使用 := 赋值 + + +/** + * 常量 + */ +// 常量直接使用 const 声明 +const a = 1 // golang 会自动推倒类型 + + +/** + * 数据类型 + */ +// 字符 +s := "hello" +// 数值 +a := 1 // int +b := 1.2 // float64 +c := 1 + 5i // complex128 +// 数组 +arr1 := [3]int{4, 5, 6} // 手动指定长度 +arr2 := [...]int{1, 2, 3} // 由golang自动计算长度 +// 切片 +sliceInt := []int{1, 2} // 不指定长度 +sliceByte := []byte("hello") +// 指针 +a := 1 +point := &a // 将a的地址赋给point + + +/** + * 流程控制 + */ +// for +i := 10 +for i > 0 { + println(i--) +} +// if else +if i == 10 { + println("i == 10") +} else { + println("i != 10") +} +// switch +switch 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只有struct +type People struct { + Age int // 大写开头的变量在包外可以访问 + name string // 小写开头的变量仅可在本包内访问 +} +p1 := People{25, "Kaven"} // 必须按照结构体内部定义的顺序 +p2 := People{name: "Kaven", age: 25} // 若不按顺序则需要指定字段 +// 也可以先不赋值 +p3 := new(People) +p3.Age = 25 +p3.name = "Kaven" + + +/** +* 方法 +*/ +// 方法通常是针对一个结构体来说的 +type Foo struct { + a int +} +// 值接收者 +func (f Foo) test() { + f.a = 1 // 不会改变原来的值 +} +// 指针接收者 +func (f *Foo) test() { + f.a = 1 // 会改变原值 +} + + +/** + * 并发 golang 的特别之处 + */ +// 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)}() +// 带缓存的channel +bc := make(chan int, 2) +go func() {c <- 1; c <-2}() // c中可以存储声明时所定义的缓存大小的数据,这里是2个 +go func() {println(<-c)}() From 3b59577e90e3d720c55fd0b93471fb2a51884726 Mon Sep 17 00:00:00 2001 From: chlins Date: Wed, 28 Feb 2018 17:52:25 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0go=E5=88=B0README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b614418..3099a35 100644 --- a/README.md +++ b/README.md @@ -14,16 +14,17 @@ ### :page_with_curl:编程语言 - [Bash](languages/bash.sh) +- [Go](languages/golang.go) ### :wrench:开发工具 - [Gdb](tools/gdb.txt) -### :pencil:文本编辑 +### :pencil:文本编辑 - [VIM](editors/vim.txt) - [Nano](editors/nano.txt) ## :pray:欢迎贡献 -希望把你的名字和头像列在这里么?欢迎把你熟悉的编程语言、框架和工具的常用知识点做成 cheatsheet 用 PR 发过来。 \ No newline at end of file +希望把你的名字和头像列在这里么?欢迎把你熟悉的编程语言、框架和工具的常用知识点做成 cheatsheet 用 PR 发过来。