猿问

在函数调用上定义 golang 结构的成本

我偶然发现了一个定义自己的请求和响应类型的函数。


func doSomething() {


    type request struct {

        resourceID string

    }


    type response struct {

        resourceContents *Data

    }


    request := initializeRequest()

    result := dispatchRequest(request)


    ...

}

我认为这有很大的优势,可以在函数主体中记录请求和响应的结构。当许多这样的函数在同一个文件中并且它们的请求和响应结构都具有不同的类型时,这样做的便利性尤其明显:在函数外部定义类型意味着我必须以不同的方式命名它们。


不过,我担心这样做的成本:让函数调用声明自己的类型与在包范围内声明该类型相比要昂贵得多吗?


另外,这种方法是惯用的吗?


蓝山帝景
浏览 87回答 1
1回答

蛊毒传说

类型是一个编译时概念,它们的作用域(通常)不会影响运行时速度,因为编译器在这些情况下生成的代码没有注意到原始类型(阅读更多关于类型擦除和具体化的内容),反射是离群值,但你在这里没有反映。也就是说,我觉得这段代码有点可疑:request := initializeRequest()在哪里initializeRequest定义的?它必须知道类型request,所以我假设它也是函数内部的?否则代码将无法编译。在许多情况下,这些考虑因素限制了局部函数结构的实用性,但如果您确实拥有局部的所有内容,我认为尽可能隐藏类型是一个很好的做法。在更大规模的项目中,测试问题也会发挥作用。如果它们隐藏在作用域中,您如何测试作用于它们的类型和函数?
随时随地看视频慕课网APP

相关分类

Go
我要回答