
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中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号