处理这样的案件最干净的方式是什么:

func a() string {
    /* doesn't matter */
}

b *string = &a()

这会生成错误:

无法获取()的地址

我的理解是,如果取局部变量的地址,Go会自动将其提升到堆中.这里很明显,返回值的地址将被获取.处理这个问题的惯用方法是什么?

推荐答案

地址操作符返回指向具有"home"的东西的指针,例如变量.代码中表达式的值是"无家可归".如果您确实需要*字符串,则必须分两步完成:

tmp := a(); b := &tmp

请注意,虽然*String有完全有效的用例,但很多时候使用它们是错误的.在GO中,string是一个值类型,但是传递起来很便宜(一个指针和一个整数).字符串的value是不可变的,更改*string会更改"home"指向的位置,而不是字符串值,因此在大多数情况下根本不需要*string.

Go相关问答推荐

Docker容器之间的连接被拒绝

CGO如何转换为文件*类型

从使用Golang otelmux检测的Otel跟踪中获取trace_id

如何解析Go-Gin多部分请求中的 struct 切片

如何在 zap 记录器库中使用自定义时间函数

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

在多个 struct 体中重用 Go 中的函数

Go Template 动态获取变量

Fizz对Gin的OpenAPI生成器正在重命名类型

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

Secrets Manager Update Secret - Secret String 额外的 JSON 编码

我无法使用反向代理更改主机标头

Golang 创建一个带有处理程序的模拟数据库并使用接口调用数据库

Golang Oauth2 服务帐户返回空刷新令牌字符串

Golang Gin 绑定请求正文 XML 到 Slice

在 go 中将运行命令的标准输出发送到其标准输入

Golang prometheus 显示自定义指标

带有 grpc 的 protobuf 用于拆分包中的 Go

try 创建新的 etcdv3 客户端时出现pc error: code = Unavailable desc = error reading from server: EOF

我应该明确地创建一个与Belongs To或Has Many对称的关系吗?