Частный тип с экспортируемыми полями
В день 2 учебника go есть это упражнение:
Почему может быть полезно иметь закрытый тип с экспортированными полями?
Например:
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), поскольку объявление типа для точки не экспортируется.
Ответы
Ответ 1
Но у вас может быть открытый конструктор, верно?
Итак, если у вас установлена функция NewGeometryPoint
func, то вы, возможно, могли бы сделать (не протестировали против компилятора)
p := NewGeometryPoint(640,480);
fmt.Println("X:",p.X, "Y:",p.Y);
Ответ 2
Абстрактный базовый тип?
package geometry
type point struct {
X, Y int;
}
type Point struct {
point;
name string;
}
type Rect struct {
P1, P2 point;
name string;
}
Ответ 3
При использовании пакета JSON (http://golang.org/pkg/json/). Вам нужно экспортировать поля, чтобы передать тип json.Marshal(), но вы, возможно, не захотите, чтобы этот тип был общедоступным для других внешних пакетов.