文章目录一、值Value与字面量Literal1. 值2. 字面量二、变量Variable1. 声明方式2. 赋值方式3. 变量默认值4. 类型与值的匹配三、常量Constant1. 声明方式2. 常量的特性3. 枚举与 iota四、值类型与引用类型1. 值类型Value Type2. 引用类型Reference Type五、内存结构与变量赋值1. 进程内存结构2. 赋值操作的本质概念定义核心特点值数据的具体表示如10、hello。分为基础类型值和复合类型值通过字面量书写。变量命名的内存空间存储值或指针。强类型、可修改声明后有零值支持类型推断和简短声明:。常量编译时确定且不可修改的值用const声明。支持iota自动生成枚举值表达式在编译期计算可用于定义配置和枚举。值类型直接存储值赋值时复制数据如int、string、struct。栈中存储性能高变量独立。引用类型存储数据地址赋值时复制指针如slice、map、chan。堆中存储多个变量共享数据修改会相互影响。一、值Value与字面量Literal先看个例子varage18// 这里的 18 是字面量它代表的值是“年龄 18 岁”age19// 现在值变成了“年龄 19 岁”但写法还是字面量 19核心作用字面量是代码中 “写死” 的数据用于初始化变量或常量。值是程序运行时实际存储的数据可能会变化变量或固定不变常量。1. 值值是程序中数据的具体表示分为基础类型值如123整型、3.14浮点型、true布尔、a字符、hello字符串。复合类型值如数组[3]int{1,2,3}、切片[]string{a,b}、结构体struct{Name string}{Tom}。2. 字面量字面量是值的直接书写形式用于初始化变量或常量基础字面量42// 整型3.1415// 浮点型true// 布尔型中// 字符型runeGo语言// 字符串复合字面量构造复合类型的值如数组、切片、映射[3]int{1,2,3}// 数组[]string{a,b}// 切片map[string]int{a:1}// 映射二、变量Variable变量是存储值的内存空间的命名引用特点强类型语言变量必须先声明后使用且类型固定。值可修改运行时可重新赋值。1. 声明方式方式语法示例说明单个声明var name string声明变量name类型为string初始值为零值。批量声明var a, b int声明多个同类型变量。批量声明块形式var ( x int y string )适用于声明多个不同类型的变量代码更整洁。2. 赋值方式先声明后赋值varageint// 声明变量初始值为 0整型零值age18// 赋值声明并初始化varnamestringTom// 显式指定类型varscore95// 类型推断根据值 95 推断为 int简短声明仅用于函数内count:0// 等价于 var count int 0仅用于函数内部简洁高效。3. 变量默认值变量未显式赋值时自动赋予对应类型的零值数值类型如int、float320布尔类型boolfalse字符串string空字符串引用类型如切片、映射、通道nil4. 类型与值的匹配赋值时需保证类型一致否则编译报错varnumint100// 错误字符串无法赋值给整型三、常量Constant常量是编译时确定且运行时不可修改的值用于定义程序中固定不变的数据如配置项、枚举值。1. 声明方式方式语法示例说明显式类型声明const PI float64 3.14159明确指定类型和值。隐式类型推断const E 2.718类型由值自动推断float64。批量声明const ( br A 1 br B 2 br )声明多个常量可混合类型。2. 常量的特性不可修改声明后无法重新赋值否则编译报错consta10a20// 错误cannot assign to a (constant 10)编译期计算常量表达式在编译时求值支持算术运算、类型转换等const(KB1024MBKB*1024// 编译时计算为 1048576)3. 枚举与iotaiota是常量声明块中的自动递增计数器用于生成枚举值const(Sundayiota// 0iota 初始为 0Monday// 1iota 自增 1Tuesday// 2)其他语法跳过值用_跳过某个枚举值const(Aiota// 0_// 1跳过C// 2)复杂表达式结合运算符生成规律值如位掩码const(Read1iota// 1 0 10b0001Write// 1 1 20b0010Exec// 1 2 40b0100)四、值类型与引用类型1. 值类型Value Type存储方式直接存储值本身位于栈内存或堆内存中的数据区域。常见类型整型、浮点型、布尔型、字符型、字符串、数组、结构体非指针结构体。特点变量赋值时复制值修改一个变量不影响另一个a:10b:a// b 复制 a 的值10b20// a 仍为 10b 变为 202. 引用类型Reference Type存储方式存储值的内存地址指针指向堆内存中的数据。常见类型切片slice、映射map、通道chan、指针*T、接口interface。特点变量赋值时复制指针多个变量指向同一数据修改会互相影响slice1:[]int{1,2,3}slice2:slice1// slice2 与 slice1 指向同一底层数组slice2[0]100// slice1[0] 也变为 100因共享数据五、内存结构与变量赋值1. 进程内存结构栈Stack存放值类型变量和引用类型的指针特点是自动分配和释放速度快。堆Heap存放引用类型的数据如切片、映射的底层数据需手动管理Go 通过 GC 自动回收。2. 赋值操作的本质值类型赋值在栈中复制值新旧变量互不影响。varxint5varyintx// y 复制 x 的值5x 和 y 是独立的栈变量。引用类型赋值复制指针地址新旧变量指向堆中的同一数据。m:map[string]int{a:1}n:m// n 复制 m 的指针指向同一 map 数据。n[a]100// m[a] 也变为 100因共享数据。
阅读完成 · 觉得有帮助?