定义

var 定义变量

1
2
3
4
5
6
7
8
var a int  // var 定义变量
var a int = 10 // var 设置初值
var a = 10 // var 自动解析类型 (但不能解析为 int8 等)
var a, b int = 1, 2 // var 定义同类型多变量
var (
a int
s string
) // var 定义多变量
1
2
3
4
5
var (
a, b int = 1, 2
s, ss string
pi = 3.1415926535 // float64
)

const 定义常量

1
2
3
4
5
6
7
8
const a int = 10  // 必须初始化
const a = 10 // 自动解析常量类型
const a, b int = 1, 2 // 定义同类型多常量
const (
a int = 10
s string = "Hello World!"
pi float64 = 3.1415926535
)

:= 自动变量

1
2
3
a := 1  // var a int = 1
s := "Hello World!" // var s string = "Hello World!"
b, ss := 2, "No Way Home."
  • 注意: 自动变量不可用于全局变量的定义。

匿名变量

  • 匿名变量 _ 伪接受数值,数值将直接被丢弃,不可访问其数值。
  • 匿名变量 _ 可以使用 =:=。(其他变量重定义将出错)
1
2
3
4
5
6
7
func getData() (int, int) {
return 10, 20
}
func main() {
a, _ := getData() // 10, _
_, a = getData() // _, 20
}

作用域

基本数据类型

概览

  • 概览中的 complex / uintptr / byte/rune 将作补充说明,其他不作介绍。
类型 默认值 描述
int / uint 0 默认位数的整型和无符号整型,unsafe.Sizeof() 查看字节数
int8 / int16 / int32 / int64 0 8 / 16 / 32 / 64 位整型
uint8 / uint16 / uint32 / uint64 0 8 / 16 / 32 / 64 位无符号整型
float32 / float64 0.0 32 / 64 位浮点数(IEEE754
complex64 / complex128 (0.0+0.0i) 32 / 64 位复数
uintptr nil 无符号整型,指针类型
byte ‘\000’ 类似 uint8,表示 ASCII 编码
rune ‘\000’ 类似 int32,表示 UTF-8 编码
  • Golang 中,int / uint 不是 int8 / int16 / int32 / int64 / uint8 / uint16 / uint32 / uint64 的别名。
  • 后面还将介绍非基本数据类型,如 stringslicechannel

复数类型 complex

  • 可以使用 a+bi 表示复数,如 0.5+1.5i

  • 可以使用内置函数 func complex(r, i float64) complex128 构造复数类型。

指针类型 uintptr / unsafe.Pointer

  • 任何指针类型不可直接转换为 uintptruintptr 可以与 unsafe.Pointer 相互转换,unsafe.Pointer 可以实现对任意数据类型的强制转换,一般直接使用 unsafe.Pointer 即可。注意:这是危险的操作。
1
2
3
a := "Hello World!"  // string: "Hello World!"
b := []byte(a) // []byte: [72 101 108 108 111 32 87 111 114 108 100 33]
c := **(**int)(unsafe.Pointer(&a)) // int: 8022916924116329800

字符类型 byte / rune

  • 字符类型使用单引号表示,默认为 rune 类型,当为 ASCII 编码范围时,可以转换为 byte 类型。字符有多种表达方式,与 Clang 有所不同。
符号 描述
'A' 字符表示
'\n' 转义字符,与 Clang 基本相同
'\101' 八进制编码,'\000' ~ '\177'0 ~ 127
'\x41' 十六进制,'\x00' ~ '\xff'0 ~ 255
'\u4f60' Unicode 编码,'\u0000' ~ '\uffff'0 ~ 65535