具有导出字段的私有类型

mba*_*hau 13 go

在go教程的第2天,有这个练习:

为什么拥有导出字段的私有类型可能有用?

例如:

package geometry

type point struct {
    X, Y int;
    name string;
}
Run Code Online (Sandbox Code Playgroud)

请注意,它point是小写的,因此不会导出,而字段X和Y是大写的,因此是.在我看来,为了能够访问其中一个导出的字段,您必须能够编写类似的内容.

p.X
Run Code Online (Sandbox Code Playgroud)

但为了使这成为可能,p必须有这样的声明:

var p geomitry.point;
Run Code Online (Sandbox Code Playgroud)

要么

p := new(geomitry.point);
Run Code Online (Sandbox Code Playgroud)

但这是不可能的(afaik),因为不会导出点的类型声明.

Sup*_*ire 20

但你可以拥有一个公共构造函数,对吗?

所以,如果你NewGeometryPoint定义了一个func,那么你可能会做(没有针对编译器进行测试)

p := NewGeometryPoint(640,480);
fmt.Println("X:",p.X, "Y:",p.Y);
Run Code Online (Sandbox Code Playgroud)


小智 9

抽象基类型?

package geometry

type point struct {
    X, Y int;
}

type Point struct {
    point;
    name string;
}

type Rect struct {
    P1, P2 point;
    name string;
}
Run Code Online (Sandbox Code Playgroud)


Jes*_*sta 5

使用JSON包时(http://golang.org/pkg/json/).您需要具有导出的字段,以将类型传递给j​​son.Marshal(),但您可能不希望将该类型公开提供给其他外部包.