与c语法不同之处:
1. 参数列表中各个参数类型相同时可以只写出最后一个,如:add(x, y int) int { return x +y }
2. 类型在参数名(变量/函数)后面
3. 函数的左大括号要跟函数名同一行,否则编译不过
4. 函数定义要先写关键字func在函数开头(函数外的每个语句都要以func、var等等关键字开头)
5. 在包或者函数级别声明变量时要用var语句
6. 函数支持多值返回,如:func swap(x, y string) (string, string) { return y,x }
7. 函数支持命名返回值,如func split(x int) (x, y int) { ... return}
8. 初始化使用表达式时可以不用写类型,由初始值推导出类型
9. 可以用 :=实现变量简捷复制,不需要加var,但仅能在函数内部使用
10.fmt.Printf格式化输出:%T输出变量类型,%q输出带双引号的字符串,%v输出结构类型
11.不同类型变量的赋值需要显示类型转换
12.常量定义要使用const,不能使用 :=,声明两个const变量可以const(x=1; y=2)
13.条件控制语句不加小括号(if、for、switch等)
14.for循环前置、后置语句可以为空,如for sum < 1000 {...},格式类似c中的while,for的循环条件为空时是死循环
15.if语句后可以加一个便捷语句,如if v:=41; sum<lim{...},if便捷语句中声明的变量只在if语句及else语句中有效
16.switch...case...在匹配成功的时候会停止,不需要像c那样显示break,没有条件的switch语句等同于switch true,用于更清晰的表达if-then-else
17.defer关键词,延缓语句执行,直到上层函数返回,延迟的函数会被压入栈中,后进先出
18.go有指针,但没有指针运算,通过指针访问结构体成员时用点操作符,指针是透明的
19.通过Name:语法可以只列出部分字段,其余字段为零值
20.由make创建slice b := make([]int, 0, 5) // len(b)=0, cap(b)=5,make的参数包括长度和容量,slice的零值是nil,一个nil的slice长度和容量都是0
21.go中若有声明但未使用的变量时编译会报错,用_来做变量名就可以了
22.go中没有类,但是可以在包内任意类型定义方法(不包括基础类型)
23.方法可以与命名类型或者命名类型的指针相关联,接收者为指针有两个好处:第一,避免在方法调用中拷贝值,第二,可以修改接收者指向的值
24.接口类型是由一组方法定义的类型的集合,接口类型的值可以存放实现这些方法的任何值
25.本地查看go语言官方文档,godoc -http=:8011(端口号自己指定),然后浏览器打开http://localhost:8011就可以了
有疑问加站长微信联系(非本文作者)