命名
Go语言强制了编码风格。
- 任何需要对外暴露的名字必须以大写字母开头,不需要对外暴露的则应该以小写 字母开头。
- Go语言明确宣告了拥护骆驼命名法而排斥下划线法。
- “{}”,左括号禁止单开一行。
gotool中包含了一个代码格式化的功能。命令:go fmt hello.go,自动格式化。
布尔类型
基本数据类型
类型 |
取值 |
int8 |
-128~127 |
int16 |
-32768~32767 |
int32 |
-2147483648~2147483647 |
int64 |
-9223372036854775808~9223372036854775807 |
uint… |
非负数,与上述对应 uint8:0~255 |
float32 |
+- 1e-45 -> +- 3.4 * 1e38 |
float64 |
+- 5 1e-324 -> 107 1e308 |
引用类型
特指 slice、map、channel
变量
局部变量不允许只声明不使用!
1 2 3 4 5 6 7 8 9 10
| //正确的声明 var x int var x int = 3 var x = 3 var{ x = 3 y = 4 } x := 3 //仅限于在函数中。 x , y := 3 , 4
|
1 2 3 4 5 6
| func x() { var x = 3 x := 3 //错误,:=用于声明 + 赋值 ,x已经声明过了,不能再次声明 , 只能赋值。 x , y := 1 , 4 //正确 , y为新变量,此时:=对于x降级为赋值。必须有至少一个新的变量方可。 } //退化赋值的前提条件:至少有一个新的变量被定义,且必须是同一作用域。
|
1 2 3 4
| var x = 3 func x(){ x := 4 //正确,此时的x与函数外的x作用域不同,相当于一个新的变量。 }
|
多变量
在进行多变量赋值时,先计算右侧的所有值,然后完成赋值操作。
1 2 3 4 5
| func main(){ a , b := 1 , 2 a , b = a + 1 : b + 1 fmt.Println(a , b) //结果:2 ,3 }
|
1 2 3 4 5 6 7 8
| func exchange(a , b int) (int,int){ a , b = b , a return a , b } func main(){ //只想使用b _ , b = exchange(1 , 2) }
|
常量
运行时恒定不变的,编译期间能确定值!可在函数内定义,允许只定义不使用。
1 2
| 显式类型定义: const b string = "abc" 隐式类型定义: const b = "abc"
|
1 2
| 正确的做法:const c1 = 2/3 错误的做法:const c2 = getNumber() // 引发构建错误: getNumber() used as value
|
字符类型
严格来说这并非go语言的一个类型,字符只是证书的特殊用例。byte 类型是 uint8 的别名,对于只占用 1 个字节的传统 ASCII 编码的字符来说,完全没有问题。
例如:var ch byte = 'A'
字符使用单引号括起来。
1 2 3 4
| 判断是否为字母:unicode.IsLetter(ch) 判断是否为数字:unicode.IsDigit(ch) 判断是否为空白符号:unicode.IsSpace(ch) 这些函数返回一个布尔值。
|
字符串
字符串是UTF-8的一个序列(当字符为ASCII码时占一个字节,其他字符需要2-4个字节)。