Go編程——變數、函數匯出與首字母大寫

來源:互聯網
上載者:User

標籤:go   golang   變數匯出   函數匯出   大寫   

Go編程——變數、函數匯出與首字母大寫
標識符可被 匯出 以允許從另一個包訪問。

同時符合以下條件即為已匯出標識
1、標識符名的第一個字元為Unicode大寫字母(Unicode類別“Lu”);
2、該標識符在包塊中已聲明或為欄位名或方法名。


以程式匯入gotest/even包為例

package mainimport (    "even"    "fmt")func main() {    i:=even.I    fmt.Printf("Is %d even? %v\n", i, even.Even(i))}

package evenvar I int = 123 func Even(i int) bool {    return i%2==0}func odd(i int) bool {    return i%2!=0}

1.當地套件 even 在這裡匯入;2. 官方 fmt 包匯入;3.調用 even 包中的函數。 訪問一個包中的函數的文法是 <package>.Function ()變數 <package>.Var。在 Go 中,當 變數或函數的首字母大寫的時候, 函數會被從包中匯出(在包外部可見, 或者說公有的),因此函數名是 Even。如果修改main.go 的第 10 行,使用未導出的函數 even.odd:

fmt.Printf("Is %d even? %v\n", i, even.odd(i))

由於使用了私人的函數,會得到一個編譯錯誤:

main.go:10: cannot refer to unexported name even.odd

概括來說: 公有函數的名字以大寫字母開頭;私人函數的名字以小寫字母開頭。

 對於結構體
type S struct {    T1        //欄位名字是 T1    *T2       //欄位名字是 T2    P.T3      //欄位名字是 T3    x, y int  //欄位名字是 x 和 y}
同樣,首字母大寫的欄位可以被匯出,也就是說,在其他包中可以進行讀寫。字段名以小寫字母開頭是當前包的私人的,函數定義也是類似的。對於T1, *T2等匿名欄位,其作用是“如果結構體 S,包含一個匿名欄位 T1,那麼這個結構體 S 就有了 T1的方法。如果包含的匿名欄位為 *T2,那麼這個結構體 S 就有了 *T2 的方法。”具體見另一篇文章http://blog.csdn.net/typ2004/article/details/41605083(golang 匿名欄位)。


Go編程——變數、函數匯出與首字母大寫

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.