如何禁用结构文字

时间:2019-07-05 15:51:57

标签: go struct constructor immutability

假设我想创建一个数据类型Unit,该数据类型的float值介于0.0和1.0之间:

type Unit struct {
  value float64
}

func NewUnit (v float64) *Unit {
  if v >= 0.0 && v <= 1.0 {
    return &Unit{v}
  } else {
    panic("OMG, wrong value here!!1!")
  }
}

因此,如果我正常创建它,则一切正常:

oneHalf := NewUnit(0.5)
fmt.Println(oneHalf)

//~ tooLarge := NewUnit(1.1)  // Raises exception, as it should
//~ fmt.Println(tooLarge)

但是问题是我只能创建一个结构文字并绕过我的工厂方法:

evil := &Unit{1.1}
fmt.Println(evil)

首先要破坏创建此结构的目的。

(当然,即使我使用factory方法创建结构,也可以稍后更改,因为Go中没有什么是真正不变的。但是我可以使用getter或类似的方法来处理它,对吧?)< / p>

0 个答案:

没有答案