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