首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Golang中是否可以进行内嵌函数,包含循环?

在Golang中是否可以进行内嵌函数,包含循环?
EN

Stack Overflow用户
提问于 2017-08-23 10:18:07
回答 2查看 13.7K关注 0票数 13

例如,我在golang进行了以下测试:

代码语言:javascript
复制
// inline-tests.go
package inlinetests

func plus(a, b int) int {
    return a + b
}

func plus_plus(a, b, c int) int {
    return plus(plus(a, b), plus(b, c))
}

func plus_iter(l ...int) (res int) {
    for _, v := range l {
        res += v
    }
    return
}

如果我试图构建它,我会收到以下信息:

代码语言:javascript
复制
go build -gcflags=-m inline-tests.go
# command-line-arguments
./inline-tests.go:4: can inline plus
./inline-tests.go:8: can inline plus_plus
./inline-tests.go:9: inlining call to plus
./inline-tests.go:9: inlining call to plus
./inline-tests.go:9: inlining call to plus
./inline-tests.go:12: plus_iter l does not escape

有任何方法让编译器内联plus_iter吗?如果,有什么方法可以内联映射迭代吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-23 11:04:02

去Wiki CompilerOptimizations 功能衬里 只有简短和简单的函数是内联的。要内联一个函数,必须包含少于40个表达式,并且不包含函数调用、循环、标签、闭包、恐慌、恢复、选择、开关等复杂内容。

目前,带循环的函数没有内联。

票数 22
EN

Stack Overflow用户

发布于 2021-03-28 18:41:50

截至go版本1.16:https://golang.org/doc/go1.16#compiler

编译器现在可以使用非标记for循环、方法值和类型开关的内联函数。内联还可以检测到更多的间接调用,其中内联是可能的。

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

https://stackoverflow.com/questions/45836981

复制
相关文章

相似问题

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