Go 语言基本语法
Go语言虽然在语言设计上不被王垠看好,但它如此简洁的代码结构确实让人着迷。
语句
Go语言语句结尾不需要;。
变量和常量
使用var声明变量。当变量需要初始化时,可以使用赋值符号:=代替=以省略var关键字。
var a intvar b stringvar c int = 10var d = "golang" // 编译器自动推断类型d := 10与C语言或Java不同,Go语言的类型声明在变量右侧。需要注意的是,如果程序中声明的变量未经使用,程序将无法通过编译。Go语言是一种工程化的语言,因此它的一些特性让人感觉不可理喻,但又会在实际工程中提高效益。
Go语言的变量赋值支持一些炫酷的写法,比如要交换变量x和y的值,可以使用这种违反直觉的写法:
x, y = y, xGo语言中使用const定义常量,true、false和iota是预定义常量。其中iota稍显特殊,iota会在每一个const关键字出现时重置为0,然后在下一次const出现前,每出现一次iota,iota的值加1。
const a = iota // 0const b = iota // 0const ( c = iota // 0 d = iota // 1)数组和切片
声明一个元素个数为3的数组,并初始化:
array := [3]int{0, 1, 2}array[0] = 3fmt.Println(array)和其他语言一样,Go语言在声明数组后并不能改变数组的大小。所以Go语言提供了像Python一样的切片。切片可以从数组中产生,也可以使用make()函数新建。
array := [3]int{0, 1, 2}slice1 := array[:2] // 从数组中创建slice2 := make([]int, 3) // 直接创建fmt.Println(slice1) // [0 1]fmt.Println(slice2) // [0 0 0]除切片外,映射也是使用make函数创建,映射的类型全称是var myMap map[string] int,意为声明变量myMap,key为string,value为int。
流程控制
Go语言允许if-else语句的条件表达式不加小括号,当然加上也无妨。
a := 1if a == 1 { print(1)} else if (a == 2) { print(2)} else { print(3)}选择语句的条件表达式同样不需要小括号,另外也不需要break,其他匹配项并不会执行,这一点和Scala相同。对选择语句的优化貌似已经是不约而同的做法。
i := 0switch i {case 0: print(0)case 1: print(1)}循环结构的条件表达式依然不需要小括号。Go语言只支持for循环。同时对无限循环的场景也做了优化,不再需要for(;;)的写法。
for { print(1)}函数
Go语言诞生自C语言的派系,因此Go语言从一开始就不是OOP或FP的语言,没有类、对象等概念。函数是程序中的一等公民。和C语言相同,(main包下的)main函数是整个程序的入口。
func add(a int, b int) (int, int) { return a + b, a - b}func main() { x, y := add(1, 2) print(x, y)}Go语言的语句简洁高效,函数名后的第一个括号为入参,第二个括号是出参。函数支持多返回值。如果参数类型相同,可以将类型声明合并到一起,如(a, b int)。
结构体
刚才提到Go语言没有类、对象等概念,但是Go语言有类似C语言的结构体,并且能力强大。这里定义一个Person...
剩余内容已隐藏