首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用加运算符连接字符串时,Go变量转义到堆

使用加运算符连接字符串时,Go变量转义到堆
EN

Stack Overflow用户
提问于 2020-11-25 08:53:10
回答 1查看 255关注 0票数 0

关于此代码的问题。为什么变量转义到堆

代码语言:javascript
复制
func main() {
    port := "8080"
    host := "localhost:"
    connection := host + port
    fmt.Println(connection)
}

gorun -gcflags "-m -l“main.go

代码语言:javascript
复制
# command-line-arguments
./main.go:12:21: host + port escapes to heap
./main.go:13:13: ... argument does not escape
./main.go:13:13: connection escapes to heap

我发现如果使用fmt.Sprintf,也会导致变量转义到堆

EN

回答 1

Stack Overflow用户

发布于 2020-11-25 09:13:35

导致转义的不是串联,而是对fmt包的调用。

如果调用内置的println()函数,它将不会:

代码语言:javascript
复制
println(connection)

运行go run -gcflags "-m -l" main.go

代码语言:javascript
复制
# command-line-arguments
./main.go:12:21: host + port does not escape
localhost:8080

fmt.Println()的情况下,编译器不能保证传递的值会发生什么,所以它将其放在堆上。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64997017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档