copyright zvvq
在 Golang 中,数据分为两大类:
值类型:这些是独立的数据单元,在传递时会被复制。 例子包括: 基本类型:整数(int、uint等)、浮点数(float32、float64)、布尔值(bool)、字符串、符文(单个字符)。 数组:相同类型的固定大小集合(例如,[5]int)。函数内对数组元素的更改会创建副本,而不是修改原始数组。 引用类型:它们保存对实际数据的引用(内存地址),允许函数修改原始数据。例子包括: 切片: 动态调整大小、可调整大小的视图到底层数组中。函数内切片元素的更改直接修改原始数据。 Maps: 键值对的无序集合。函数内地图值的更改会修改原始地图。 指针:存储其他变量的内存地址的变量,允许间接访问和操作。这是一个展示这些属性的示例程序:
1
内容来自samhan666
2 zvvq好,好zvvq
3 内容来自samhan
4 本文来自zvvq
5 内容来自zvvq,别采集哟
6 本文来自zvvq
7 zvvq
8
9
10 copyright zvvq
11
zvvq好,好zvvq
12
zvvq
13
本文来自zvvq
14 内容来自samhan
15 内容来自zvvq,别采集哟
16
17
18 zvvq
19
zvvq
20
21
22 内容来自samhan
23 内容来自zvvq
24 内容来自samhan666
25
26 copyright zvvq
27
zvvq.cn
28 copyright zvvq
29
30
内容来自samhan
31
32 copyright zvvq
33
34 内容来自zvvq,别采集哟
35
本文来自zvvq
36 copyright zvvq
37
38
内容来自samhan
39 内容来自zvvq
40 zvvq好,好zvvq
41
42
43 内容来自zvvq,别采集哟
44
45
46 内容来自zvvq,别采集哟
47
48 内容来自zvvq
49
zvvq好,好zvvq
50 zvvq.cn
51
52 zvvq好,好zvvq
53
54
内容来自samhan
55 本文来自zvvq
56 内容来自zvvq,别采集哟
57
zvvq
58
包主
导入“fmt”
内容来自zvvq
函数主() { 内容来自zvvq
// 声明并初始化变量 内容来自samhan666
fmt.Println("--------original------") // 打印初始值的标题 本文来自zvvq
// 数组 - 相同类型元素的固定大小集合
zvvq.cn
var arr [2]int // 声明一个大小为 2 的数组来保存整数 zvvq好,好zvvq
arr[0] = 1 // 将第一个元素初始化为 1 zvvq好,好zvvq
arr[1] = 2 // 用值 2 初始化第二个元素 copyright zvvq
// Slice - 将动态大小的视图放入底层数组中
slice := []int{1, 2} // 创建一个初始值为 1 和 2 的切片
// Map - <a style="color:f60; text-decoration:underline;" href="https://www.php.cn/zt/49710.html" target="_blank">键值对</a>的无序集合
内容来自samhan
m := map[int]int{1: 1, 2: 2} // 创建键值对 (1:1, 2:2) 的映射 内容来自samhan666
// 打印数组、切片和映射的初始状态 copyright zvvq
fmt.Printf("数组 = %v,切片 = %v,映射 = %vn",arr,切片,m)
内容来自samhan666
// 调用函数 f 来潜在地修改传递的变量
zvvq好,好zvvq
f(arr, slice, m) // 传递数组(副本)、切片(引用)和映射(引用) copyright zvvq
fmt.Println() // 打印一个空行以进行分隔
zvvq.cn
fmt.Println("--------post update------") // 打印修改值的标题 zvvq
// 函数调用后打印数组、切片和映射的状态 本文来自zvvq
fmt.Printf("数组 = %v,切片 = %v,映射 = %vn",arr,切片,m) zvvq
}
本文来自zvvq
// 函数 f 接受数组、切片和映射(引用)
func f(arr [2]int, slice []int, m map[int]int) { zvvq
// 修改数组内的元素(数组按值传递,更改不会影响原始数组) 内容来自samhan
arr[0] = 2 // 将数组副本的第一个元素更改为 2
本文来自zvvq
// 修改切片内的元素(切片是通过引用传递的,更改会影响原始切片) 内容来自zvvq
slice[0] = 2 // 将切片的第一个元素更改为 2
copyright zvvq
// 修改地图内的元素(地图是通过引用传递的,更改会影响原始地图) 本文来自zvvq
m[1] = 2 // 将映射中与键 1 关联的值更改为 2 本文来自zvvq
// 调用函数 f2 来进一步修改传递的变量
f2(arr, 切片, m)
} zvvq好,好zvvq
// 函数 f2 接受数组、切片和映射(引用) 内容来自samhan666
func f2(arr [2]int, slice []int, m map[int]int) {
// 修改数组内的元素(数组按值传递,更改不会影响原始数组)
arr[1] = 3 // 将数组副本的第二个元素更改为 3
本文来自zvvq
// 修改切片内的元素(切片是通过引用传递的,更改会影响原始切片) 本文来自zvvq
slice[1] = 3 // 将切片的第二个元素更改为 3
copyright zvvq
// 修改地图内的元素(地图是通过引用传递的,更改会影响原始地图)
zvvq好,好zvvq
m[2] = 3 // 将映射中与键 2 关联的值(或创建新的键值对)更改为 3
}
输出
1
zvvq
2 内容来自samhan
3
copyright zvvq
4
5 内容来自zvvq,别采集哟
-----原创------
zvvq好,好zvvq
数组 = [1 2],切片 = [1 2],地图 = 地图[1:1 2:2] 本文来自zvvq
--------更新后------ 内容来自zvvq
数组 = [1 2],切片 = [2 3],地图 = 地图[1:2 2:3]
以上就是揭开神秘面纱:揭开 Go 的价值变化的详细内容,更多请关注其它相关文章! 本文来自zvvq