来自 ruby,考虑 golang 指针确实需要转变思维。
在红宝石中,
# variable array_a is a reference to an array object array_a = [1,2,3] # array_b and array_c now points to the same array object as array_a array_b = array_a array_c = array_a # updating array_b will update the underlying array object defined by 'array_a' # array_a, array_b and array_c will have the same output array_b << 4 puts "a: " + array_a puts "b: " + array_b puts "c: " + array_c # output # a: [1,2,3,4] # b: [1,2,3,4] # c: [1,2,3,4]
在 go 中:
go 指针(*type)引用存储数据的内存地址。 它需要像 *string=0x14000114180 这样的东西。 go 值(类型)保存实际数据 复制会创建一个新的独立实例
// main.go package main import "fmt" func main() { // create an array of length 4, with initial values [1, 2, 3, 0] array_a := [4]int{1,2,3} // 'array_b' references the same underlying array as 'array_a' array_b := array_a array_c := array_c array_b[3] = 4 fmt.println("array_a: " array_a) fmt.println("array_b: " array_b) fmt.println("array_c: " array_c) } // output // array_a: [1 2 3 0] // array_b: [1 2 3 4] <-- only b changed // array_c: [1 2 3 0]
为了达到与 ruby 相同的结果,我们需要确保我们没有将 array_a 的值“复制”到 array_b 和 array_c。
相反,我们需要为 array_b 和 array_c 分配一个指向 array_a 的指针。
// main.go package main import "fmt" func main() { // Create an array of length 4, with initial values [1, 2, 3, 0] array_a := [4]int{1,2,3} // 'array_b' and 'array_c' is a pointer to the memory address that stores the value of 'array_a' array_b := &array_a array_c := &array_c array_b[3] = 4 // Since array_a does not store a pointer, we print it directly // array_a (value) // +-------------------+ // | [1, 2, 3, 4] | // +-------------------+ // ^ // | // &array_a (address) <--- array_c, array_b (pointers) // fmt.Println("array_a: ", array_a) // '*array_b' is called dereferencing // Since 'array_b' stores the pointer to 'array_a', weneed to "dereference it" fmt.Println("array_b: ", *array_b) fmt.Println("array_c: ", *array_c) } // output // array_a: [1 2 3 4] // array_b: [1 2 3 4] // array_c: [1 2 3 4]
以上就是Go 语言指针的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号