參數和返回值中的指針和值在Go中,返回一個struct價值或其部分。對于我見過的個人: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值的指針,第三個期望傳入一個現有的結構并重寫該值。我已經看到所有這些模式都在不同的環境中使用,我想知道關于這些模式的最佳實踐是什么。你什么時候會用它?例如,第一個可以用于小型結構(因為開銷最小),第二個可以用于較大的結構。第三,如果您想要非常高效的內存,因為您可以很容易地重用單個結構實例之間的調用。對于何時使用哪種方法,有什么最佳做法嗎?同樣,關于切片的相同問題: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} }}func myfunc(s *[]*MyStruct) {
*s = []MyStruct{ &MyStruct{Val: 1} }}再說一遍:這里的最佳實踐是什么?我知道切片總是指針,所以將指針返回到片是沒有用的。但是,我是否應該返回一個struct值的片段,一個指向structs的指針片段,我是否應該將指向一個片段的指針作為參數傳遞(Go應用程序引擎API)?
參數和返回值中的指針和值
慕碼人2483693
2019-06-29 15:00:41