拾遗:Go 基础
这 Go,越看越像是 C 和 Python 的混合体~~!
- gofmt 用于格式化代码,缩进使用 tab,而不是空格;Python 官方则建议使用空格,而不是 tab
- package Go 惯例,使用单个小写的英文单词命名,不添加下划线、大写字母等
- Go 提倡注释,不鼓励长命名
- Go 变量、函数等对象的命名具有语法意义,首字母大写的对象,代表可被本 package 之外的对象调用,首字母小写的对象,则不能被外部调用
- interface 命名加 er 后缀,如 Reader、Writer 等
- Go 提供骆峰命名法,而不是下划线分断式命名
- Go 中分号的含义与 C 中相同,但仅有少数情况下必须显式使用,如:for 循环中分隔循环条件需要使用
- Go 中语句块的每一个大括号不能单独占一行
必须使用如下形式: for i > 0 { x() } 不能使用如下形式: for i > 0 { x() }
- Go 中没有 while 或 do ... while 循环,集中使用 for 循环;for 可以像 C 中一样使用,也可以当作 while 的形式使用,或者完全不加条件就等同于 C 中的 for (;;) {} 形式
- Go 强制语句块使用 {...} 包围,即使只有一条语句
- Go switch 和 if 可以如 for 一样同时定义变量并设定条件
- Go 函数体中定义并同时赋值可以使用 i, _, j := 1, 2, 3, 4 的形式,多变量同时赋值,下划线仅用作占位符,用于消化数字 2 避免语法错误,最后的 4 则不需要添加下划线,默认忽略
- Go 可以像 Python 一样使用 a, b = b, a 交换变量的值
- Go switch 默认遇到条件符合即中断,无须如 C 中一样添加 break;单个 case 可以符带多个条件,以逗号分割,如:case 4, 5, 7, 'Y', '=' : ...;default 语句可以放置在任意位置;可以不带条件,默认条件为 true,部分场景下可用于代替大量的 if .. else if ...
- Go 中的 break 和 continue 可以像 goto 一样使用标签自定义跳转位置,break 可用于循环和 switch 中,continue 只能用于循环中
- Go 中函数可以返回多个值,C 中要达到同样的效果只能使用结构体
- Go 的函数返回值可以直接定义出名称,在函数内无需再声明即可直接使用,函数返回无须再显示指明参数,只书写一个 return 即可
- Go defer ... 如 C 中的 atexit(...) 一样按照选进后出的顺序注册函数退出时的清理行为
- Go 中分配内存的函数:new 与 make,new 返回的是指针,其分配出的内存会自动清零;make 返回的不是指针,专用于 slices、maps、channels 三种数据类型
- Go 中可以返回局部变量地址,函数退出后变量依然有效
- Go 中有数组、切片、字典类型,变长数组以 x := [...] type {} 声明,切片以 y := [] type {} 形式声明,字典以 z := map[keytype] valuetype {} 形式声明
- Go 数组可以直接赋值,无须如 C 中一样用循环逐个元素赋值,两个数组之间可以直接赋值(无素类型和数量必须完全一致);数组是完全按值传递,即使在函数参数中也一样,若要使用必须显式取其地址 &;
- Go 多维数组仍然以 C 中的数组中数组逻辑实现
- Go 数据类型强制转换使用 Python 风格,如 int64(i),而不是 (int64)i
- Go 中的 Print 类函数根据参数类型自动判断输出类型,不以指定的 %d、%x 等标识为依据,%v 可以打印所有类型的参数值,包括数组、切片等,%+v 会将结构体、map 等类型的 key 字段一起打印,%T 打印数据类型
- Go 合并两个切片用 append,x := []int{1, 2, 3} y :=[]int{4, 5, 6} x = append(x, y...),最后的 ... 必须添加;若逐个追加非聚合类型,则不需要 ...
- Go 如 Python 一样,可以使用 + 连接多个字符串
。。。
HADEX_ FROM HELL.