我正在学习Go,我有一个基于以下代码的问题:
package main
import (
"fmt"
)
type Vector struct {
x, y, z int
}
func VectorFactory(x,y,z int) *Vector {
return &Vector{x, y, z}
}
func main() {
vect := VectorFactory(1, 2, 3)
fmt.Printf("%d\n", (vect.x * vect.y * vect.z))
}
在这里,我使用Vector
,x
和y
定义了一个z
类型,并且我定义了一个声明指针的函数VectorFactory
到Vector
并返回该指针。我使用此函数创建一个名为Vector
的新vect
。
new
关键字而不是构建Factory
吗?delete
Vector
,就像在C ++中一样?如果是这样,怎么样?感谢。我还在等待送我的Go书。
答案 0 :(得分:2)
首选NewThing
至ThingFactory
。
不要制作NewThing
函数,除非您有复杂的初始化,或者您故意不导出结构的某些部分。仅选择性地设置结构的一部分并不复杂,这可以通过使用标签来实现。复杂的事情就像"插槽Q的值取决于插槽Zorb的值是什么"。未记录的结构字段可用于信息隐藏,但应谨慎使用。
Go是垃圾收集的,任何未引用的数据都有资格被收集。开始时不要担心,然后达到这样的程度,确保你清理对你不再感兴趣的数据的任何引用,以避免意外的活跃("意外的活跃"基本上是GC相当于"内存泄漏")。
如果您希望经常打印数据结构,请考虑为它们创建String
方法(这与您执行的打印不完全对应,但通常对于矢量更有用):
func (v Vector) String() string {
return fmt.Sprintf("V<%d, %d, %d>", v.x v.y, v.z);
}
除非&#34; vect&#34;对你来说真的意味着什么,更喜欢&#34; v&#34;或&#34; vector&#34;作为一个名字。