我偶然發現了一個定義自己的請求和響應類型的函數。func doSomething() { type request struct { resourceID string } type response struct { resourceContents *Data } request := initializeRequest() result := dispatchRequest(request) ...}我認為這有很大的優勢,可以在函數主體中記錄請求和響應的結構。當許多這樣的函數在同一個文件中并且它們的請求和響應結構都具有不同的類型時,這樣做的便利性尤其明顯:在函數外部定義類型意味著我必須以不同的方式命名它們。不過,我擔心這樣做的成本:讓函數調用聲明自己的類型與在包范圍內聲明該類型相比要昂貴得多嗎?另外,這種方法是慣用的嗎?
1 回答

蠱毒傳說
TA貢獻1895條經驗 獲得超3個贊
類型是一個編譯時概念,它們的作用域(通常)不會影響運行時速度,因為編譯器在這些情況下生成的代碼沒有注意到原始類型(閱讀更多關于類型擦除和具體化的內容),反射是離群值,但你在這里沒有反映。
也就是說,我覺得這段代碼有點可疑:
request?:=?initializeRequest()
在哪里initializeRequest
定義的?它必須知道類型request
,所以我假設它也是函數內部的?否則代碼將無法編譯。在許多情況下,這些考慮因素限制了局部函數結構的實用性,但如果您確實擁有局部的所有內容,我認為盡可能隱藏類型是一個很好的做法。
在更大規模的項目中,測試問題也會發揮作用。如果它們隱藏在作用域中,您如何測試作用于它們的類型和函數?
- 1 回答
- 0 關注
- 121 瀏覽
添加回答
舉報
0/150
提交
取消