中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

go語言碎片整理之包

發布時間:2020-07-23 23:06:08 來源:網絡 閱讀:538 作者:霍帥兵 欄目:編程語言

在工程化的Go語言開發項目中,Go語言的源碼復用是建立在包(package)基礎之上的,本文介紹了go語言中如何定義包,如何導出包的內容以及如何導入其他包。

包介紹

包(package)是多個Go源碼的集合,是一種高級的代碼復用方案,go語言為我們提供了很多的內置包,如fmt、os、io等。

定義包

我們還可以根據自己的需要創建自己的包,一個包可以簡單理解為一個存放.go文件的文件夾。該文件夾下面的所有go文件都要在代碼的第一行添加如下代碼,聲明該文件歸屬包。

package 包名

注意事項:
1、一個文件夾下只能有一個包,同樣一個包的文件不能在多個文件夾下。
2、包名可以不和文件夾的名字一樣,包名不能包含-符號
3、包名為main的包為應用程序的入口包,編譯時不包含main包的源代碼時不會得到可執行文件。

可見性

如果想在一個包中引用另外一個包里的標識符(如變量、常量、類型、函數等),該標識符必須是對外可見的(public)。在go語言中只需要將標識符的首字母大寫就可以讓標識符對外可見。
舉個例子,我們定義一個包名為pkg2的包,代碼如下:

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 "包的路徑"

注意事項:

  • import導入語句通常放在文件開頭包聲明語句下面。
  • 導入的包名需要使用雙引號包裹起來。
  • 包名是從$GOPATH/src/后開始計算的,使用/進行路徑分割。
  • Go語言中禁止循環導入包。

自定義包名

在導入包名的時候,我們還可以為導入的包名設置別名。具體格式如下:

import 別名  "包的路徑"

多行導入方式定義別名:

import (
    "fmt"
    m "github.com/Q1mi/studygo/pkg_test"
)
func main(){
    fmt.Println(m.Add(100,200))
    fmt.Println(m.Mode)
}

匿名導入包

如果只希望導入包,而不使用包內部的數據時,可以使用匿名導入包。具體的格式如下:

import _  "包的路徑"

匿名導入的包與其他方式導入的包一樣都會被編譯到可執行文件中。

init()初始化函數

init()函數介紹

在Go語言程序執行時導入包語句會自動觸發包內部init()函數的調用,需要注意的是:init()函數沒有參數也沒有返回值。init()函數在程序運行時自動被調用執行,不能在代碼中主動調用它。
包初始化執行的順序如下圖所示:

go語言碎片整理之包

init()函數執行順序

Go語言包會從main包開始檢查其導入的所有包,每個包中又可能導入了其他包,Go編譯器由此構建出一個樹狀的包引用關系,再根據引用順序決定編譯順序,依次編譯這些包的代碼。
在運行時,被最后導入的包會最先初始化并調用其init()函數,如下圖示:
go語言碎片整理之包

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

福鼎市| 当雄县| 全州县| 全椒县| 克什克腾旗| 太康县| 额济纳旗| 玛曲县| 浏阳市| 金寨县| 城固县| 临沭县| 新龙县| 门头沟区| 金门县| 揭西县| 竹北市| 河北区| 常州市| 安化县| 荥经县| 沾益县| 蓬溪县| 平利县| 萨迦县| 白玉县| 将乐县| 仪征市| 元氏县| 安顺市| 闽侯县| 宣武区| 东乡族自治县| 息烽县| 清镇市| 蒙城县| 平原县| 湟中县| 金山区| 互助| 宜都市|