所以这是我在stackoverflow中的第一个问题。 :)
我们在org包中定义了一个结构,如下所示:

type Employee struct {
    FirstName, LastName string
    salary              int
}
然后在main.go文件中,我们初始化如下结构:
func main() {
    ross := Employee {
       FirstName: "Ross",
       LastName:  "Geller",
    }

    fmt.Println(ross)
}
输出将如下所示:
{Ross Geller 0}
由于薪金字段不是从Employee结构类型导出的,因此它显示int的零值。最终用户将假定此员工的薪水为0。
  • 有什么办法可以控制未导出的字段?
  • 在实时情况下解决此类问题的最佳方法是什么?
  • 这真的是问题吗?
  • 最佳答案

    好吧,如果您想初始化字段,则可以始终编写导出的函数或方法来执行此操作,例如

    func New(first,last,salary string) Employee{
      //...
    }
    
    之所以可以拥有未导出的类型,是为了能够创建称为不透明类型的东西。
    您可以在数据设置器和获取器上使用方法,并执行复杂的操作,而不必担心用户会破坏数据的内部状态。
    假设您正在编写绘图应用程序,并且有一个画家Struct,它可以跟踪光标以及当前的颜色和内容。您确实不希望您的用户能够手动与您的画家打交道。那会破坏一切。
    因此,用户通过初始化程序创建painter,并将其作为Painter类型传递,并使用诸如moveTolineTo之类的方法在内部更新状态。

    10-07 15:43