基本数据类型

Go 是静态类型语言。变量的类型确定后,不能随便改成另一种类型。

一、常用类型

类型说明示例
string字符串"hello"
int整数18
int6464 位整数数据库 ID 常用
float64浮点数99.5
bool布尔值true / false
byte字节,等价于 uint8文件、网络数据常见
rune字符,等价于 int32处理 Unicode 字符

二、字符串

package main

import "fmt"

func main() {
	name := "张三"
	message := "你好," + name

	fmt.Println(message)
	fmt.Println(len(message))
}

len() 返回字符串占用的字节数,不是中文字符个数。

三、rune 处理中文字符

package main

import "fmt"

func main() {
	text := "你好Go"

	for _, ch := range text {
		fmt.Printf("%c\n", ch)
	}
}

range 遍历字符串时,拿到的是 Unicode 字符,也就是 rune

四、整数和浮点数

package main

import "fmt"

func main() {
	age := 18
	price := 99.8

	fmt.Printf("age=%d\n", age)
	fmt.Printf("price=%.2f\n", price)
}

格式化常用占位符:

占位符含义
%d十进制整数
%f浮点数
%.2f保留 2 位小数
%s字符串
%v默认格式
%+v打印结构体字段名和值
%T类型

五、类型不能随便混用

var a int = 10
var b int64 = 20

// 错误:int 和 int64 是不同类型
// fmt.Println(a + b)

fmt.Println(int64(a) + b)

Go 不会自动把 intint64 混起来计算,需要显式转换。

六、布尔值

isActive := true

if isActive {
	fmt.Println("启用")
}

Go 的 if 条件必须是 bool

下面这种写法是错误的:

count := 1

// 错误:count 不是 bool
// if count {
// }

七、类型别名和自定义类型

type UserID int64

func main() {
	var id UserID = 1001
	fmt.Println(id)
}

自定义类型能让代码语义更清楚,例如 UserID 比普通 int64 更能表达含义。