V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
guonaihong
V2EX  ›  Go 编程语言

goalng 如何控制函数成为 内联函数?

  •  
  •   guonaihong ·
    guonaihong · 2020-12-01 10:16:29 +08:00 · 1658 次点击
    这是一个创建于 1454 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 c 里面可以通过宏替换,把一段逻辑,插入到代码里面,可以省去对函数调用的运行影响。简单来说内联会快点。

    有童鞋在 go 做过相关研究吗?

    第 1 条附言  ·  2020-12-02 16:56:59 +08:00

    上面内联概念用的大的范围,细想不妥。内联和宏替换是有区别的,虽然一般场景差不多去除函数调用,比如 通常会实现max宏

    #define max(a, b) (a) > (b) ? (a):(b)
    

    指定内联关键字

    int __inline__  max(int a,  int b) {
        return a > b ?a :b;
    }
    

    如果重新提问。直接问go里面有类似宏替换的黑科技,或者指定内联关键字。

    8 条回复    2020-12-02 16:57:53 +08:00
    cmdOptionKana
        1
    cmdOptionKana  
       2020-12-01 10:22:35 +08:00
    Go 想这样做也很容易,官方工具链就提供 generate, 但绝大多情况下都不需要优化到这个程度,或者说有这种需求的项目通常会选择 C/Rust
    guonaihong
        2
    guonaihong  
    OP
       2020-12-01 10:27:51 +08:00
    @cmdOptionKana 有相关文档吗?我看下。还是在 golang wiki 里面找?
    guonaihong
        4
    guonaihong  
    OP
       2020-12-01 10:30:45 +08:00
    @whitehack 感谢。。。
    0x11901
        5
    0x11901  
       2020-12-01 17:15:47 +08:00
    其实 u1s1,你在 c 里面也就是暗示编译器你想内联,实际内不内联还是编译器说了算的。就算你写的时候根本不知道啥叫内联函数,编译器没准也给你内联了。

    所以我觉得你压根没必要纠结这事,相信 go 的编译器吧
    ly841000
        6
    ly841000  
       2020-12-01 17:52:30 +08:00
    @0x11901 c 里面几大编译器都能强制内联
    0x11901
        7
    0x11901  
       2020-12-02 14:36:21 +08:00
    @ly841000 讲道理你一个函数里面写循环写递归再“强制”内联,编译器肯定是会拒绝的……然后我仔细看了一眼楼主的问题,这好像说的不是内联函数吧?宏替换???
    guonaihong
        8
    guonaihong  
    OP
       2020-12-02 16:57:53 +08:00
    @0x11901 我举的例子不太好,直接关注内联就行。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2934 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:46 · PVG 22:46 · LAX 06:46 · JFK 09:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.