php小編子墨將為大家介紹一個重要的特性,就是在特定條件下創建GO結構。這項特性使得我們可以根據需要來判斷是否要創建GO結構,從而提高程式的效率和效能。透過合理地使用這個特性,我們可以避免不必要的GO結構創建,減少記憶體佔用和垃圾回收的壓力,以及提高程式的運作效率。在本文中,我們將詳細介紹如何使用這個特性,並給出一些實際應用的範例。
我的go程式碼片段如下:
type mystruct struct { a int } if a == nil { cond = 0 var a_mystruct_obj mystruct // if this condition is satified then only create this a_mystruct_obj obj } else if b == nil { cond = 1 var b_mystruct_obj mystruct // if this condition is satified then only create this b_mystruct_obj obj } else { cond = 2 // // if this condition is satified then create both the above structure objects a_mystruct_obj & b_mystruct_obj. // is having the below declaration again in else a valid go code ? var a_mystruct_obj mystruct var b_mystruct_obj mystruct }
我有 c 背景。這在 c 會很簡單。 go 中有動態記憶體分配嗎?我如何在 go 中實現這一目標?
在 else 中再次宣告 2 是否是有效的 go 程式碼?
var A_mystruct_obj MyStruct var B_mystruct_obj MyStruct
或我是否需要在這裡有某種運行時多態性。
更新:
我嘗試這樣做,但它甚至沒有按預期編譯。
https://go.dev/play/p/ioq81aexgjn
再次更新
我嘗試過這個,似乎有效。這樣可以嗎?
https://go.dev/play/p/r_ywzmkgrps
您的程式碼中有兩個問題:
if
/else
子句)當您解決第一個問題時,即透過將變數宣告移到if
子句範圍之外,以使它們可以被if
語句後面的程式碼存取:
var a_mystruct_obj mystruct var b_mystruct_obj mystruct if a == nil { cond = 0 // initialise a_mystruct } else if b == nil { cond = 1 // initialise b_mystruct } else { cond = 2 // initialise a_mystruct and b_mystruct }
現在兩個變數都已聲明,而且兩個變數都使用新指派的 mystruct
進行初始化,無論到達 if
語句中的哪個子句。
要解決這個問題,請將變數更改為指針,並在 if
語句的相應分支中分配所需的值:
var a_mystruct_obj *mystruct var b_mystruct_obj *mystruct if a == nil { cond = 0 a_mystruct_obj = &mystruct{} } else if b == nil { cond = 1 b_mystruct_obj = &mystruct{} } else { cond = 2 a_mystruct_obj = &mystruct{} b_mystruct_obj = &mystruct{} }
額外提示:未來的您會感謝您將其重構為一對語句,確定是否需要a
或b
或兩者,然後簡化您的複合if
語句作為兩個單獨語句,分別初始化a
或b
:
var A_mystruct_obj *MyStruct var B_mystruct_obj *MyStruct areq := a == nil || (..condition 2..) breq := b == nil || (..condition 2..) if areq { A_mystruct_obj = &MyStruct{} } if breq { B_mystruct_obj = &MyStruct{} }
目的是避免邏輯重複(dry 原則:不要重複自己)和關注點分離。即,將 a
和/或 b
是否需要的問題與初始化 a
和 b
何時需要的問題分開。 em> 必需。
注意:不可能更具體地說明如何表達 condition 2
,因為從您發布的程式碼中不清楚該條件是什麼。
以上是僅當滿足特定條件時才建立 GO 結構的詳細內容。更多資訊請關注PHP中文網其他相關文章!