美文网首页
golang 如何选择 T 和 *T

golang 如何选择 T 和 *T

作者: mingzhi618 | 来源:发表于2019-07-12 14:51 被阅读0次

    在定义函数和方法的时候,作为一位资深的Go开发人员,一定会对函数的参数和返回值定义成T和*T深思熟虑,有些情况下可能还会有些苦恼。

    那么什么时候才应该把参数定义成类型T,什么情况下定义成类型*T呢。

    一般的判断标准是看副本创建的成本和需求。

        1. 不想变量被修改。 如果你不想变量被函数和方法所修改,那么选择类型T。相反,如果想修改原始的变量,则选择*T

        2. 如果变量是一个大的struct或者数组,则副本的创建相对会影响性能,这个时候考虑使用*T,只创建新的指针,这个区别是巨大的

        3. (不针对函数参数,只针对本地变量/本地变量)对于函数作用域内的参数,如果定义成T,Go编译器尽量将对象分配到栈上,而*T很可能会分配到堆上,这对垃圾回收会有影响

    reference: https://colobu.com/2017/01/05/-T-or-T-it-s-a-question/

    相关文章

      网友评论

          本文标题:golang 如何选择 T 和 *T

          本文链接:https://www.haomeiwen.com/subject/zunekctx.html