目录
注释
注释风格同 c/c++
行注释: // code
块注释: /* code */
每一个包应该有相关注释,在 package 语句之前的块注释将被默认认为是这个包的文档说明,其中应该提供一些相关信息并对整体功能做简要的介绍。一个包可以分散在多个文件中,但是只需要在其中一个进行注释说明即可。
// Package superman implements methods for saving the world. // // Experience has shown that a small number of procedures can prove // helpful when attempting to save the world. package superman
几乎所有全局作用域的类型、常量、变量、函数和被导出的对象都应该有一个合理的注释。如果这种注释(称为文档注释)出现在函数前面,例如函数 Abcd,则要以 "Abcd..."
作为开头。
示例:
// enterOrbit causes Superman to fly into low Earth orbit, a position // that presents several possibilities for planet salvation. func enterOrbit() error { ... }
godoc 工具会收集这些注释并产生一个技术文档。
函数
没啥好说的, 参考其他语言的函数,参数列表,返回值列表
//基本定义
func fun1() {
//todo
}
//通用格式
func functionName(parameter_list) (return_value_list) {
...
}
- parameter_list 的形式为 (param1 type1, param2 type2, …)
- return_value_list 的形式为 (ret1 type1, ret2 type2, …)
参数列表里的元素类型相同时(arg1 int, arg2 int),可以简写 (arg1, arg2 int)
Golang 支持多返回值, 多返回值时需要用 () 把他们括起来
类型
变量(或常量)包含数据,这些数据可以有不同的数据类型,简称类型。类型定义了某个变量的值的集合与可对其进行操作的集合。
基本类型,如:int、float、bool、string;
复合类型,如:struct、array、slice、map、channel;
只描述类型的行为的,如:interface。
使用 var 声明的变量的值会自动初始化为该类型的零值。复合类型的默认值是 nil , 参考其他语言的 NULL, 0 等...
自定义类型
使用 type 关键字可以定义你自己的类型,你可能想要定义一个新的类型,但是也可以定义一个已经存在的类型
如 type Myint int
注意:不是别名,因为使用这种方法定义之后的类型可以拥有更多的特性,且在类型转换时必须显式转换。
类型别名,只能对包内的类型产生作用,对包外的类型采用类型别名,在编译时将会提示如下信息:
cannot define new methods on non-local type string
可以有很多灵活的用法:同样的数据在以不同的类型表现出来时,拥有的是不同的特性/方法。
类型转换
在必要以及可行的情况下,一个类型的值可以被转换成另一种类型的值。
Go 语言不存在隐式类型转换,所有的转换都必须显式说明:类型 B 的值 = 类型 B(类型 A 的值)
valueOfTypeB = typeB(valueOfTypeA)
具有相同底层类型的变量之间可以相互转换:
var a Myint = 5
b := int(a)
c := Myint(b)
强制转换,先转为interface ,再以目的类型来解释,有点类似 c++ 的 reinterpret_cast?风险很大,程序可能会 down 掉
var str string = "abc"
var tmp interface{} = str
var num int = tmp.(int)
命名规范
我看到的是这么建议的,不建议用 _下划线,而是驼峰法
返回某个对象的函数或方法的名称一般都是使用名词,没有
Get...
之类的字符,如果是用于修改某个对象,则使用SetName
。有必须要的话可以使用大小写混合的方式,如 MixedCaps 或 mixedCaps,而不是使用下划线来分割多个名称。
对此我只想说, 建议很好,但是我不接受, 我就喜欢 Get_name() , Set_name() 这样的风格