您好,登錄后才能下訂單哦!
golang中package怎么用?一般大家對go語言包的了解可能停留在概念的層面上,而對于package的使用方法了解相對較少。今天就跟大家聊聊package的使用方法。
包(package)是多個Go源碼的集合,是一種高級的代碼復用方案,Go語言為我們提供了很多內置包,如fmt,os,io等。
我們可以根據自己的需要創建自己的包。 一個包可以簡單理解為一個存放.go文件的文件夾。該文件夾下面的所有go文件都要在代碼的第一行添加如下代碼,聲明改文件歸屬的包。 package 包名 注意事項: 1.一個文件夾下面直接包含的文件只能歸屬一個package,同樣一個package的文件不能再多個文件夾下。 2.包名可以不和文件夾的名字一樣,包名不能包含-符號。 3.包名為main的包為應用程序的入口包,這種包編譯后會得到一個可執行文件,而編譯不包含main包的源代碼則不會得到可執行文件。
如果想在一個包中引用另外一個包里的標識符(如變量,常量,類型,函數等)時,該標識符必須是對外可見的(public)。 在Go語言中,只需要將標識符的首字母大寫就可以讓標識符對外可見了。
package pkg2 import "fmt" // 包變量可見性 var a = 100 // 首字母小寫,外部包不可見,只能在當前包內使用 // 首字母大寫外部包可見,可在其他包中使用 const Mode = 1 type person struct { // 首字母小寫,外部包不可見,只能在當前包內使用 name string } // 首字母大寫,外部包可見,可在其他包中使用 func Add(x, y int) int { return x + y } func age() { // 首字母小寫,外部包不可見,只能在當前包內使用 var Age = 18 // 函數局部變量,外部包不可見,只能在當前函數內使用 fmt.Println(Age) }
結構體中的字段名和接口中的方法名如果首字母都是大寫,外部包可以訪問這些字段和方法。例如: type Student struct { Name string //可在包外訪問的方法 class string //僅限包內訪問的字段 } type Payer interface { init() //僅限包內訪問的方法 Pay() //可在包外訪問的方法 }
要在代碼中引用其他包的內容,需要使用import關鍵字導入使用的包。具體語法如下: import "包的路徑" 注意事項: 1.import導入語句通常放在文件開頭包聲明語句的下面。 2.導入的包名需要使用雙引號包裹起來。 3.包名是從$GOPATH/src/后開始計算的,使用/進行路徑分隔。 4.GO語言中禁止循環導入包。
import "包1" import "包2"
import ( "包1" "包2" )
在導入包名的時候,我們還可以為導入的包設置別名。通常用于導入的包名太長或者導入的包名沖突的情況。具體語法格式如下: import 別名 "包的路徑"
單行導入方式定義別名: import "fmt" import m "github.com/Q1mi/studygo/pkg_test" func main() { fmt.Println(m.Add(100, 200)) fmt.Println(m.Mode) }
多行導入方式定義別名: import ( "fmt" m "github.com/Q1mi/studygo/pkg_test" ) func main() { fmt.Println(m.Add(100, 200)) fmt.Println(m.Mode) }
如果我們只希望導入包,而不使用內部的數據時,可以使用匿名導入包。具體格式如下: import _ "包的路徑" 匿名導入的包與其他方式導入的包一樣,都會被編譯到可執行文件中。
在Go語言程序執行時,導入包語句會自動觸發內部init()函數的調用。 需要注意的是: init()函數沒有參數也沒有返回值。 init()函數在程序運行時自動被調用執行,不能再代碼中主動調用它。
Go語言包會從main包開始檢查其導入的所有包,每個保重又可能導入了其他的包。 Go編譯器由此構建出一個樹狀的包引用關系,再根據引用順序決定編譯順序,依次編譯這些包的代碼。
關于golang中package就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果喜歡這篇文章,不如把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。