数据类型
数据类型大致分为:布尔型、数字类型、字符串类型、派生
布尔
类型: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 |
浮点/复数型
| 类型 | 信息 |
|---|---|
float32 | IEEE-754 32位浮点型数 |
float64 | IEEE-754 64位浮点型数 |
complex64 | 32 位实数和虚数 |
complex128 | 64 位实数和虚数 |
复数是将两个不同维度的数打包成
a+bi形式的组合数,a 是实部、b 是虚部,i 是虚部标记且人为规定i²=-1(解决负数开平方无解问题);Go中用complex(实部,虚部)创建复数,real()/imag()提取实虚部,多用于科学计算/信号处理
其他类型
| 类型 | 信息 |
|---|---|
byte | 类似 uint8 |
rune | 类似 int32 |
uint | 32 或 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 声明过了,那么再次使用 := 声明变量,就产生编译错误
值类型和引用类型
int、float、bool 和 string 都是值类型,使用这些类型的变量直接指向存在内存中的值
go
// 值类型
var num int = 1当一个值类型的变量赋值给另一个值类型的变量的时候,实际上就是在内存中拷贝了一份数据。两份数据共存,互不打扰。当修改一方的数据另一方的数据不会造成改变
go
var v1 int = 1
var v2 int = v1但是可以通过指针来达到一方修改另一方也会同步修改的目的
