代码之家  ›  专栏  ›  技术社区  ›  mbarkhau

带有导出字段的私有类型

go
  •  12
  • mbarkhau  · 技术社区  · 16 年前

    在Go教程的第2天中,有一个练习:

    为什么在导出字段中使用私有类型很有用?

    例如:

    package geometry
    
    type point struct {
        X, Y int;
        name string;
    }
    

    注意到 point 是小写的,因此不导出,而字段x和y是大写的,因此是。在我看来,为了能够访问某个导出字段,您必须能够编写类似的内容。

    p.X
    

    但为了实现这一点,P必须做出如下声明:

    var p geomitry.point;
    

    p := new(geomitry.point);
    

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

    3 回复  |  直到 14 年前
        1
  •  20
  •   Suppressingfire    16 年前

    但是你可以有一个公共的构造器,对吗?

    所以如果你有 NewGeometryPoint func定义的,那么您可以这样做(还没有针对编译器进行测试)

    p := NewGeometryPoint(640,480);
    fmt.Println("X:",p.X, "Y:",p.Y);
    
        2
  •  9
  •   ppierre    16 年前

    抽象基类型?

    package geometry
    
    type point struct {
        X, Y int;
    }
    
    type Point struct {
        point;
        name string;
    }
    
    type Rect struct {
        P1, P2 point;
        name string;
    }
    
        3
  •  5
  •   Jesse    14 年前

    使用JSON包时(http://golang.org/pkg/json/)。您需要导出字段,才能将类型传递给json.marshal(),但您可能不希望该类型对其他外部包公开。