在Go中,布尔值的类型为 bool ,值是 true 或 false ,默认为 false 。
// 示例代码
var isActive bool // 全局变量声明
var enabled, disabled = true, false // 忽略类型的声明
func test() {
var available bool // 一般声明
valid := false // 简短声明
available = true // 赋值操作
}
整数类型有无符号和带符号两种。Go同时支持 int 和 uint ,这两种类型的长度相同,但具体长度取决于不同编译器的实现。当前的gcc和gccgo编译器在32位和64位平台上都使用32位来表示 int 和 uint ,但未来在64位平台上可能增加到64位。Go里面也有直接定义好位数的类型: rune , int8 , int16 , int32 , int64 和 byte , uint8 , uint16 ,uint32 , uint64 。其中 rune 是 int32 的别称, byte 是 uint8 的别称。
需要注意的一点是,这些类型的变量之间不允许互相赋值或操作,不然会在编译时引起编译器报错。
如下的代码会产生错误:
var a int8
var b int32
c:=a + b
另外,尽管int的长度是32 bit, 但int 与 int32并不可以互用。
浮点数的类型有 float32 和 float64 两种(没有 float 类型),默认是 float64 。
Go还支持复数。它的默认类型是 complex128 (64位实数+64位虚数)。如果需要小一些的,也
有 complex64 (32位实数+32位虚数)。复数的形式为 RE + IMi ,其中 RE 是实数部分, IM 是虚数部分,而最后的 i 是虚数单位。下面是一个使用复数的例子:
var c complex64 = 5+5i
//output: (5+5i)
fmt.Printf("Value is: %v", c)
Go中的字符串都是采用 UTF-8 字符集编码。字符串是用一对双引号( “” )或反引号( )括
起来定义,它的类型是 string 。
// 示例代码
var frenchHello string // 声明变量为字符串的一般方法
var emptyString string = "" // 声明了一个字符串变量,初始化为空字符串
func test() {
no, yes, maybe := "no", "yes", "maybe" // 简短声明,同时声明多个变量
japaneseHello := "Ohaiou" // 同上
frenchHello = "Bonjour" // 常规赋值
}
在Go中字符串是不可变的,例如下面的代码编译时会报错:
var s string = "hello"
s[0] = 'c'
但如果真的想要修改怎么办呢?下面的代码可以实现:
s := "hello"
c := []byte(s) // 将字符串 s 转换为 []byte 类型
c[0] = 'c'
s2 := string(c) // 再转换回 string 类型
fmt.Printf("%s\n", s2)
Go中可以使用 + 操作符来连接两个字符串:
s := "hello,"
m := " world"
a := s + m
fmt.Printf("%s\n", a)
修改字符串也可写为:
s := "hello"
s = "c" + s[1:] // 字符串虽不能更改,但可进行切片操作
fmt.Printf("%s\n", s)
如果要声明一个多行的字符串怎么办?可以通过 反引号 来声明:
m := `hello
world`
被反引号括起的字符串为Raw字符串,即字符串在代码中的形式就是打印时的形式,它没有字符转义,换行也将原样输出。
Go内置有一个 error 类型,专门用来处理错误信息,Go的 package 里面还专门有一个包 errors 来处理错误:
err := errors.New("emit macho dwarf: elf header corrupted")
if err != nil {
fmt.Print(err)
}