1. go程序中的main包比较特殊。它定义了一个独立可执行的程序,而不是一个库。在main里的main 函数也很特殊,它是整个程序执行时的入口(译注:C系语言差不多都这样)。main函数所做的事情就是程序做的。当然了,main函数一般调用其它包里的函数完成很多工作(如:fmt.Println)。
2. go语言的变量声明与其他语言(java/c)不同,只可以通过 :=/ var + 变量名(+变量类型) 声明,如有变量类型的话则后置,与python不同,若定义是缺少“:”或“var”,则定义失败。
3. 数组的定义和初始化,例 var a [5]int b := [5]int{1, 2, 3, 4, 5}。
4. 切片,与数组不同,切片可以自定义长度,可以通过”make()”创建切片,
例:
s := make([]string, 3)
good := []string{"g", "o", "o", "d"}
append操作不同与java,正确写法是s = append(s,“3”,“4”)
5. map类似python中的字典,键值对形式。 定义形式:map[key类型] value类型({ “ key ” : ” value ”})
6. 对于一个slice或者map,可以用range快速遍历,举例:
for 索引/key, 值 := 对应slice/map
若不需索引,需要用’_’代替索引位置;若不需要遍历value,直接省略即可,举例:
7. Go里的函数原生支持返回多个值,在实际的业务逻辑代码里面几乎所有的函数都返回两个值,一个是真正的返回结果,另一个是错误信息。
函数格式: func+函数名(传入参数)+返回参数 - 如果有多个就用圆括号括起来
举例:
main函数中:
8. Go语言的指针用于修改传入函数的参数,调用时加一个’&’符号。
9. 结构体的定义和初始化,举例:
10. 结构体函数的定义格式:
func+结构体名称+函数名+传入参数+返回参数(可省略/可多个)
举例:
11. go语言中的errors包可以自定义错误信息,调用方式:
errors.New( “ string ” )
举例:
12. go语言中的结构体和json可以互相转化,操作称为序列化(结构体->json)和反序列化,前提保证结构体中每一个字段的首字母是大写。
举例:
补充:Go的类型系统会在编译时捕获很多错误,但有些错误只能在运行时检查,如数组访问越界、空指针引用等。这些运行时错误会引起painc异常。一般而言,当panic异常发生时,程序会中断运行,并立即执行在该goroutine(可以先理解成线程)中被延迟的函数(defer 机制)。当出现不等于nil的时候,说明出现某些错误了,需要我们对这个错误进行一些处理;当出现不等于nil的时候,说明出现某些错误了,需要我们对这个错误进行一些处理。在Go语言中,如果你声明了一个变量但是没有对它进行赋值操作,那么这个变量就会有一个类型的默认零值。所以,我们经常将 nil 赋值给 error 类型,并且以此来判断是否有错误,那是因为 error 是个接口,而接口的零值就是 nil。