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
或两者,然后简化您的复合 a
或 b
或两者,然后简化您的复合 if
语句作为两个单独语句,分别初始化 a
或 b
语句作为两个
语句,分别初始化 何时需要的问题分开。 em> 必需。 以上是仅当满足特定条件时才创建 GO 结构的详细内容。更多信息请关注PHP中文网其他相关文章!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{}
}
a
和/或 b
是否需要的问题与初始化 a
和 b
不要重复自己)和关注点分离。即,将 condition 2