考虑到你可以(不能想出一个很棒的方法,但是)操作Go中的指针,是否有可能像在C中那样执行指针运算,比如迭代一个数组?我知道这些日子循环对于那种事情来说很好但是我只是好奇它是否可能。
答案 0 :(得分:27)
没有。来自Go FAQ:
为什么没有指针算术?
安全。如果没有指针算法,就有可能创建一种永远不会导致错误成功的非法地址的语言。编译器和硬件技术已经发展到使用数组索引的循环可以像使用指针算法的循环一样高效的程度。此外,缺少指针运算可以简化垃圾收集器的实现。
话虽如此,您可以使用unsafe
包来解决这个问题,但只是不:
package main
import "fmt"
import "unsafe"
func main() {
vals := []int{10, 20, 30, 40}
start := unsafe.Pointer(&vals[0])
size := unsafe.Sizeof(int(0))
for i := 0; i < len(vals); i++ {
item := *(*int)(unsafe.Pointer(uintptr(start) + size*uintptr(i)))
fmt.Println(item)
}
}