引數和返回值裡面到底用指標還是value
Go 裡面有很多方式返回一個 struct 的值或者 slice,我們經常會看到的是如下的程式碼:
type MyStruct struct {
Val int
}
func myfunc() MyStruct {
return MyStruct{Val: 1}
}
func myfunc() *MyStruct {
return &MyStruct{}
}
func myfunc(s *MyStruct) {
s.Val = 1
}
我知道這三種方式的不同點,第一個返回一個 struct 的 copy,第二個在函式內部建立一個指向 struct 的指標然後返回,第三個是傳入一個已經存在的 struct,然後修改他的值。
我在很多原始碼裡面見過這三種不同的用法,我是想知道這個的最佳實踐是什麼?什麼時候應該用哪一種?例如第一種用在一些小的 struct(因為這個花費是最小的),第二種應用在大的 struct,而第三種可能就是為了非常的節約記憶體,因為你在不同的呼叫中重用 struct。
slice 的例子也是類似如下:
func myfunc() []MyStruct {
return []MyStruct{ MyStruct{Val: 1} }
}
func myfunc() []*MyStruct {
return []MyStruct{ &MyStruct{Val: 1} }
}
func myfunc(s *[]MyStruct) {
*s = []MyStruct{ MyStruct{Val: 1} }
}
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- 這裡是值引用還是指標引用?指標
- STL容器裡存放物件還是指標物件指標
- Go中取址符(&)取的到底是記憶體地址,還是指標變數?Go記憶體指標變數
- 預算指標 技術指標 操作引數指標
- go語言引數傳遞到底是傳值還是傳引用Go
- 選購交換機的引數依據和主要的引數指標詳解指標
- c++函式引數和返回值C++函式
- 初級還是高階開發者,到底區別在哪裡?
- 到底是用"靜態類"還是單例單例
- 傳遞指標引數(函式內部給指標賦值)示例指標函式賦值
- 關於C++引用做為函式引數和指標作為函式引數C++函式指標
- DSP晶片效能引數有哪些重要指標?晶片指標
- GO中的函式設計時候,引數傳遞選擇傳遞值還是傳遞指標?Go函式指標
- const 變數和指標變數指標
- [Java] 變數裡存的到底是什麼Java變數
- java形式引數和返回值的深入研究Java
- 形式引數和返回值型別的對比型別
- C++中結構體是使用例項還是指標C++結構體指標
- 結構體引數的傳遞以及如何修改指標引數的值結構體指標
- 函式引數的 Default value函式
- 通過模板判斷Value是否為指標指標
- 指標常量和常量指標指標
- 07:函式之函式的引數和返回值函式
- Java引數傳遞是傳值還是傳引用?Java
- script標籤到底該放在哪裡
- 指標變數指標變數
- GOLANG將型別作為引數,用反射設定指標的指標,實現類似模板功能Golang型別反射指標
- C#裡面標籤的屬性和事件C#事件
- 用C#呼叫C++DLL時的字串指標引數傳遞問題C#字串指標
- 關於指標傳遞和指標的指標指標
- 軟體效能測試指標引數怎麼擬定指標
- 在COM中使用陣列引數-陣列指標 (轉)陣列指標
- 詳解 常量指標和指標常量指標
- 陣列指標和指標陣列陣列指標
- 指標函式 和 函式指標指標函式
- C語言指標(三):陣列指標和字串指標C語言指標陣列字串
- 網路請求回撥的Block中,到底是用weakSelf還是用self?BloC
- C語言指標(二) 指標變數 ----by xhxhC語言指標變數