Skip to content

数据类型

数据类型大致分为:布尔型、数字类型、字符串类型、派生

布尔

类型:bool

类型的值只能为 true 或者 false

数字类型

整型

类型信息范围
uint8无符号 8 位整型0 ~ 255
uint16无符号 16 位整型0 ~ 65535
uint32无符号 32 位整型0 ~ 4294967295
uint64无符号 64 位整型0 ~ 18446744073709551615
int8有符号 8 位整型-128 ~ 127
int16有符号 16 位整型-32768 ~ 32767
int32有符号 32 位整型-2147483648 ~ 2147483647
int64有符号 64 位整型-9223372036854775808 ~ 9223372036854775807

浮点/复数型

类型信息
float32IEEE-754 32位浮点型数
float64IEEE-754 64位浮点型数
complex6432 位实数和虚数
complex12864 位实数和虚数

复数是将两个不同维度的数打包成 a+bi 形式的组合数,a 是实部、b 是虚部,i 是虚部标记且人为规定 i²=-1(解决负数开平方无解问题);Go中用 complex(实部,虚部) 创建复数,real() / imag() 提取实虚部,多用于科学计算/信号处理

其他类型

类型信息
byte类似 uint8
rune类似 int32
uint32 或 64 位
int与 uint 一样大小
uintptr无符号整型,用于存放指针

字符串

类型:string

字符串就是一串固定长度的字符连接起来的字符序列;Go 的字符串是由单个字节连接起来的;Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本

派生

指针类型(Pointer)

指针类型(Pointer)是存储另一个变量内存地址的类型,通过指针可间接访问和修改目标变量的值,通过 &* 进行操作

&取地址符,用于获取变量的内存地址,是定义指针时关联目标变量的核心符号

*取值符,通过指针存储的内存地址获取或修改目标变量的值,是操作指针指向数据的核心符号

go
package main

import "fmt"

func main() {
	// 基础使用
	num := 10
	var p *int = &num
	fmt.Println("变量值:", num)   // 输出 10
	fmt.Println("变量地址:", &num) // 输出num的内存地址
	fmt.Println("指针存储的地址:", p) // 输出与&num一致的地址
	fmt.Println("通过指针取值:", *p) // 输出 10
	*p = 20
	fmt.Println("修改后变量值:", num) // 输出 20

	// 函数传参场景
	a := 10
	changeValue(a)
	fmt.Println("传值后:", a) // 输出 10(原变量未变)
	changeValueByPtr(&a)
	fmt.Println("传指针后:", a) // 输出 100(原变量被修改)
}

// 传值方式:修改的是副本,原变量不变
func changeValue(num int) {
	num = 100
}

// 传指针方式:直接修改原变量
func changeValueByPtr(num *int) {
	*num = 100
}

数组类型

结构化类型(struct)

Channel 类型

函数类型

切片类型

接口类型(interface)

Map 类型

变量

声明变量的是使用 var 关键字

go
// 一般声明
var [标识符] [数据类型]

// 多个声明
var [标识符1], [标识符2], [标识符3] [数据类型]

// 一般声明赋值
var [标识符] [数据类型] = [数据值]

// 多个声明赋值
var [标识符1], [标识符2], [标识符3] [数据类型] = [数据值1], [数据值2], [数据值3]

// 多个声明(一般用于全局变量)
var (
    [标识符1] [数据类型1]
    [标识符2] [数据类型2]
)

也可以不写数据类型程序会自己推断

go
var [标识符] = [数据值]

注意:对于声明的变量必须要使用,否则会爆出编译异常


变量默认值:

类型默认值
数字类型0
布尔型false
字符串""(空字符串)
其他nil

还有一种写法 [标识符] := [值],他就等价于 var [标识符] [数据类型]

go
intVal := 1

// 等价于
var value int = 1

需要注意的是在使用变量之前变量就已经使用 var 声明过了,那么再次使用 := 声明变量,就产生编译错误

值类型和引用类型

intfloatboolstring 都是值类型,使用这些类型的变量直接指向存在内存中的

go
// 值类型
var num int = 1

当一个值类型的变量赋值给另一个值类型的变量的时候,实际上就是在内存中拷贝了一份数据。两份数据共存,互不打扰。当修改一方的数据另一方的数据不会造成改变

go
var v1 int = 1
var v2 int = v1

但是可以通过指针来达到一方修改另一方也会同步修改的目的

常量