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