Golang语法初读-1
更新日期:
搭好环境,看看Go的语法吧,参考书:GO语言编程
第一天,个人感觉
- Golang 应该属于结构化编程
- 看到作者写到Golang是更好的C语言 这个观点到是相当赞同
- 说实话吸引人的地方有限,defer? Multiple return values?
变量
变量描述:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | //int var a int a = 1 b := 1 // string c, str := 1, "string" // Array var is [2]int is[0] = 1 is[1] = 2 a := [2][2]int{ {1,2}, {3,4} } var myArray [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} // 切片 var mySlice []int = myArray[:5] var slice1 = []int{1, 2, 3, 4, 5} // 结构体 type PersonInfo struct { ID string Name string Address string } // map var personDB map[string] PersonInfo personDB = make(map[string] PersonInfo) personDB["12345"] = PersonInfo{"12345", "Tom", "Room 203"} personDB["1"] = PersonInfo{"1", "Jack", "Room 103"} person, ok := personDB["1234"] if ok { fmt.Println("Found Person ", person.Name, "with ID 1234 .") } else { fmt.Println("Do not found Person with ID 1234 .") } monthdays := map[string]int{ "Jan":31,"Feb":28, }// 最后一个逗号是必须的。 fmt.Println("---- ", monthdays) // ---- map[Jan:31 Feb:28] |
函数
Golang中函数的基本组成为:关键字func,函数名,参数列表,返回值,函数体和返回语句
个人觉得这里得package name就是调用名,即:
Golang中的泛型 interface{}, 先这么理解吧
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | func MyPrintf(args ...interface{}){ for _, arg := range args { switch arg.(type) { case int: fmt.Println("int value") case string: fmt.Println("string value") case int64: fmt.Println("int64 value") default: fmt.Println("noknown value") } } } |
错误处理
- error接口 还不是太懂
- defer 这个还是比较NB的,省下了好多close
- panic & recover 讲的太少,下来在看吧
小计
- 在有返回值的函数中,不能在有判断的地方直接renturn value
1 2 3 4 5 6 7 | func example (x int) int { if x==0 { return 5 } else { return x } } |
书上写Will throw: function ends without a return statement
但是我运行了下没出错啊... 是否是在说尽信书不如无书,哈哈
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package main import "fmt" func example (x int) int { if x==0 { return 5 } else { return x } } func main() { fmt.Println("Hello, 世界", example(4)) fmt.Println("Hello, 世界", example(5)) } |
1 2 | Hello, 世界 4 Hello, 世界 5 |
- 这样的命名规则
小写字母开头的函数只在本包可见,大写字母开头的函数才可以被其他包可见,该规则同样适用于类型和变量
这个规则让人只想说shit