2009-11-20 74 views
11

在輸入教程的第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); 

然而,這是不可能的(據我所知),因爲點的類型聲明不被導出。

回答

20

但是你可以有一個公共的構造函數,對吧?

所以,如果你有一個NewGeometryPoint FUNC定義,那麼你也許可以做(沒有對編譯器測試)

p := NewGeometryPoint(640,480); 
fmt.Println("X:",p.X, "Y:",p.Y); 
+1

是的,我測試了這與編譯器,這是行不通的。 – 2009-11-20 21:34:05

+1

哇,我喜歡那樣。看起來我發現了我的新技術。 – sdellysse 2009-11-21 02:24:43

9

一個抽象基類?

package geometry 

type point struct { 
    X, Y int; 
} 

type Point struct { 
    point; 
    name string; 
} 

type Rect struct { 
    P1, P2 point; 
    name string; 
} 
4

使用JSON包時(http://golang.org/pkg/json/)。您需要導出字段以將類型傳遞給j​​son.Marshal(),但您可能不希望將該類型公開提供給其他外部程序包。