当前位置: 首页 > news >正文

【Go】--值类型与引用类型

值类型 vs 引用类型

类型分类赋值行为函数传参
int, float, bool, string值类型创建副本传副本
数组值类型复制整个数组传整个数组副本
结构体值类型复制整个结构体传整个结构体副本
切片引用类型共享底层数组共享底层数据
映射引用类型共享底层数据共享底层数据
通道引用类型共享底层数据共享底层数据
指针值类型复制指针地址传指针副本

值类型 (Value Types)

特点: 变量直接存储值,赋值和传参时会创建副本

package mainimport "fmt"func main() {// 值类型示例a := 10b := a  // 创建 a 的副本b = 20  // 修改 b 不会影响 afmt.Println(a) // 10fmt.Println(b) // 20
}

引用类型 (Reference Types)

特点: 变量存储的是内存地址,赋值和传参时共享底层数据

func main() {// 引用类型示例slice1 := []int{1, 2, 3}slice2 := slice1  // 共享底层数组slice2[0] = 100   // 修改 slice2 会影响 slice1fmt.Println(slice1) // [100 2 3]fmt.Println(slice2) // [100 2 3]
}

具体分类

值类型包括:

// 1. 基本数据类型
var i int
var f float64
var b bool
var s string// 2. 数组
var arr [3]int// 3. 结构体
type Person struct {Name stringAge  int
}
var p Person// 4. 指针(本身是值类型,但指向引用)
var ptr *int

引用类型包括:

// 1. 切片 (slice)
var slice []int// 2. 映射 (map)
var m map[string]int// 3. 通道 (channel)
var ch chan int// 4. 函数 (function)
var fn func()// 5. 接口 (interface)
var err error

详细示例对比

值类型行为

func modifyValue(x int) {x = 100  // 修改的是副本
}func main() {num := 10modifyValue(num)fmt.Println(num) // 10,原值未改变arr1 := [3]int{1, 2, 3}arr2 := arr1     // 数组是值类型,会复制整个数组arr2[0] = 100fmt.Println(arr1) // [1 2 3],原数组未变fmt.Println(arr2) // [100 2 3]
}

引用类型行为

func modifySlice(s []int) {s[0] = 100  // 修改共享的底层数组
}func main() {slice := []int{1, 2, 3}modifySlice(slice)fmt.Println(slice) // [100 2 3],原切片被修改m1 := map[string]int{"a": 1}m2 := m1           // 映射是引用类型,共享底层数据m2["a"] = 100fmt.Println(m1)    // map[a:100],原映射被修改fmt.Println(m2)    // map[a:100]
}

特殊情况:指针

func modifyViaPointer(p *int) {*p = 100  // 通过指针修改原值
}func main() {num := 10modifyViaPointer(&num)fmt.Println(num) // 100,原值被修改// 指针本身是值类型,但可以模拟引用行为var p1 *int = &nump2 := p1    // p2 是 p1 的副本,但指向同一个地址*p2 = 200fmt.Println(*p1) // 200fmt.Println(num) // 200
}
http://www.dtcms.com/a/491862.html

相关文章:

  • 用串口控制DAC
  • 兼职20网站开发成都工装装修设计公司
  • asp.net 获取网站域名wordpress注册码
  • qData 数据中台在 ARM 架构与信创环境下的兼容性与适配研究
  • 网站建设图片编辑中国建设银行招聘网站通知
  • 可做商业用途的图片网站自己做的网站怎么发布到网上
  • MYSQL 表连接查询,左/右/内连接
  • [Python环境] pip install 报 ProxyError?试试关闭本次终端代理设置!
  • Linux学习笔记--Pinctrl子系统驱动
  • 动力无限西安网站建设网络推广是网络营销的基础
  • 如何在conda虚拟环境中设置CUDA_HOME变量
  • 建设厅试验员考试报名网站兰州公司做网站
  • 人工智能的本质是什么
  • SpringBoot-依赖管理和自动配置
  • 网站seo优化有哪些方面定制一款app要多少钱
  • 南通建设工程造价信息网站网站开发需要解决难题
  • 摄影网站开发的意义企业网站搭建步骤
  • 做网站的好处和坏处厦网站建设培训学校
  • CS50ai: week2 Uncertainty我的笔记B版:一口气从“爬山”到“退火”, 优化与CSP超好懂入门
  • 第十章:技术路线:成为“技术扫地僧”(3)
  • cocos creator学习之typeScript常见语法问题
  • 公司网站突然打不开了品牌网站建设 蝌蚪6小
  • 网站 没有备案 访问不了工商联网站建设方案
  • 存在即合理?数字化转型需破除“流程惯性“思维、重构底层逻辑
  • 南阳企业网站制作做网站推广和网络推广
  • 专业网站建站费用wordpress当前网址参数
  • 天猫网站是用什么技术做的东莞响应式网站哪家强
  • 茶文化网站建设内容网络管理软件免费
  • RocketMQ基础知识
  • 天气预报:基于python天气分析预测系统 气象数据分析 机器学习 爬虫 多元线性回归预测算法 中国天气网 Flask框架(建议收藏)✅