考虑到你可以(想不出一个很好的方法来放置它,但是)在Go中操作指针,有没有可能像在C中那样执行指针算法,比如迭代数组?我知道现在这种情况下循环很好,但我只是好奇这是否可能.

推荐答案

不是的.从Go FAQ:

为什么没有指针算法?

安全.如果没有指针算法,就有可能创建一种永远不会派生出不正确成功的非法地址的语言.编译器和硬件技术已经发展到使用数组索引的循环可以与使用指针算法的循环一样高效的地步.此外,缺少指针算法可以简化垃圾收集器的实现.

也就是说,你可以通过使用unsafe软件包来解决这个问题,但是just don't:

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)
    }
}

https://play.golang.org/p/QCHEQqy6Lg

Go相关问答推荐

CGO Linux到Windows交叉编译中的未知类型名称

[0]Func()as";请勿比较哨兵类型

../golang/pkg/mod/github.com/wmentor/lemmas@v0.0.6/processor.go:72:9:未定义:令牌.进程

Websocket服务器实现与x/net库trowing 403

如何在S汇编器中更高效地将全局数据加载到霓虹灯寄存器?

Kusto Go API 从多个表查询

Go-如何在递归函数中关闭通道

启动套接字服务器会干扰 gRPC/http 客户端服务器通信 Golang

Go Template 动态获取变量

使用Go和Operator SDK通过API调用设置Kubernetes Pods的安装步骤

Golang校验器包:重命名字段错误处理

如何忽略打印达到最大深度限制 go colly

如何用mpb创建两行进度条?

如何使用 Docker 引擎 SDK 和 Golang 运行 docker 挂载卷

在 Go GRPC 服务器流式拦截器上修改元数据

使用反射在 struct 内迭代切片 struct

显示作为服务帐户身份验证的谷歌日历事件 - Golang App

如何断言类型是指向golang中接口的指针

是否存在一个Go泛型类型约束,该约束捕获了将类型用作映射中的键的能力?

Go 错误:cannot use generic type without instantiation