如何在Struct中定义常量

cstyle · · 6411 次点击
楼主的问题,重点在于java的static。尽管该变量是定义在Vect,但实际上是全局唯一副本。因此,从应用上,需要判定是用于判定zero相等,还是为了定义这么个全局副本。所以有两种方式: 1. 如果是强调唯一副本,则很方便,就直接定义一个ZeroVec的变量即可,不用嵌入在Vec的struct中。只需要在外边用var一个变量即可,全局**一个副本**。代码easy: ```Go var Zero = &Vec{x: 0, y: 0, z: 0} ``` 2.如果是运行时判断为0值,则没必要定义一个变量。参照标准库time.IsZero。代码如下: ```Go type Vec struct { x, y, z float64 } func (c *Vec) IsZero() { return c.x == 0 && c.y == 0 && c.z == 0 //java中,也需要实现对应的判等方法,否则就是判断地址是否一致。 } ``` 很久没搞java了,很生疏。不知道是否解决你的疑问。不仅之处,见谅!
#5
更多评论
polaris
社区,需要你我一同完善!
类似这样子实现,看能不能满足你要求: ```go package main import "fmt" type Vec struct { x, y, z float64 Zero *Vec } func NewVec(x, y, z float64) *Vec { return &Vec{ x: x, y: y, z: z, Zero: &Vec{x: 0, y: 0, z: 0}, } } func main() { v := NewVec(10, 2, 30) fmt.Println(v) } ```
#1
stevewang
耶和华是我的牧者,我必不至缺乏。
go不支持struct对象作为常量。 所以只能定义为变量: ``` var ( Zero = Vec{0, 0, 0} ) ``` 或者通过一个包装函数获取: ``` func ZeroVec() Vec { return Vec{0, 0, 0} } ```
#2