命名

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个字节)。