識別符號可被 匯出 以允許從另乙個包訪問。
同時符合以下條件即為已匯出標識
1、識別符號名的第乙個字元為unicode大寫字母(unicode類別「lu」);
2、該識別符號在包塊中已宣告或為欄位名或方法名。
以程式匯入gotest/even包為例
package
main
import (
"even"
"fmt"
)func
main()
package evenvar i int = 123
func even(i int) bool
func odd(i int) bool
1.本地包 even 在這裡匯入;
2. 官方 fmt 包匯入;
3. 呼叫 even 包中的函式。 訪問乙個包中的函式的語法是 .function (), 變數 .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, *t2等匿名字段,其作用是「如果結構體 s,包含乙個匿名字段 t1,那麼這個結構體 s 就有了 t1的方法。如果包含的匿名欄位為 *t2,那麼這個結構體 s 就有了 *t2 的方法。」具體見另一篇文章
(golang 匿名字段)。
Go函式與變數
package main import fmt var a 100func main package main import fmt var a 100func main package main import fmt var a 100funcf1 func main package main i...
go常量與變數
常量使用關鍵字const,常量的資料型別只能是數字型 整數,浮點和複數 字串型和布林型。格式 const name type value 比如 const a 1 複製 在go語言中,可以省略型別,因為編譯器可以根據常量的值來推斷型別。常量在賦值時,可以使用運算子,比如 const b 1 2 複製...
Go 型別與變數
go 語言中的型別與其他語言類似,比較特殊的有以下幾個 bool 型別 它的值只能是 true 與 false。int uint 它們的長度會根據作業系統的不同 32 64 bit 的不同而有所區別。儲存指標的的32 64整形 uintptr 引用型別 slice,map,chan 值型別的預設值為...