go語言碎片整理之包-創(chuàng)新互聯(lián)

在工程化的Go語言開發(fā)項(xiàng)目中,Go語言的源碼復(fù)用是建立在包(package)基礎(chǔ)之上的,本文介紹了go語言中如何定義包,如何導(dǎo)出包的內(nèi)容以及如何導(dǎo)入其他包。

網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)介紹好的網(wǎng)站是理念、設(shè)計(jì)和技術(shù)的結(jié)合。成都創(chuàng)新互聯(lián)公司擁有的網(wǎng)站設(shè)計(jì)理念、多方位的設(shè)計(jì)風(fēng)格、經(jīng)驗(yàn)豐富的設(shè)計(jì)團(tuán)隊(duì)。提供PC端+手機(jī)端網(wǎng)站建設(shè),用營(yíng)銷思維進(jìn)行網(wǎng)站設(shè)計(jì)、采用先進(jìn)技術(shù)開源代碼、注重用戶體驗(yàn)與SEO基礎(chǔ),將技術(shù)與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺化效果。

包介紹

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

定義包

我們還可以根據(jù)自己的需要?jiǎng)?chuàng)建自己的包,一個(gè)包可以簡(jiǎn)單理解為一個(gè)存放.go文件的文件夾。該文件夾下面的所有g(shù)o文件都要在代碼的第一行添加如下代碼,聲明該文件歸屬包。

package 包名

注意事項(xiàng):
1、一個(gè)文件夾下只能有一個(gè)包,同樣一個(gè)包的文件不能在多個(gè)文件夾下。
2、包名可以不和文件夾的名字一樣,包名不能包含-符號(hào)
3、包名為main的包為應(yīng)用程序的入口包,編譯時(shí)不包含main包的源代碼時(shí)不會(huì)得到可執(zhí)行文件。

可見性

如果想在一個(gè)包中引用另外一個(gè)包里的標(biāo)識(shí)符(如變量、常量、類型、函數(shù)等),該標(biāo)識(shí)符必須是對(duì)外可見的(public)。在go語言中只需要將標(biāo)識(shí)符的首字母大寫就可以讓標(biāo)識(shí)符對(duì)外可見。
舉個(gè)例子,我們定義一個(gè)包名為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)
}

結(jié)構(gòu)體中的字段名和接口中的方法名如果首字母都是大寫,外部包可以訪問這個(gè)字段和方法,例如:

type Student struct {
    Name string
    class string
}
type Payer interface{
    init()
    Pay()
}

包的導(dǎo)入

要在代碼中引用其他包的內(nèi)容,需要使用import 關(guān)鍵字導(dǎo)入使用的包。具體語法如下:

import "包的路徑"

注意事項(xiàng):

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

自定義包名

在導(dǎo)入包名的時(shí)候,我們還可以為導(dǎo)入的包名設(shè)置別名。具體格式如下:

import 別名  "包的路徑"

多行導(dǎo)入方式定義別名:

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

匿名導(dǎo)入包

如果只希望導(dǎo)入包,而不使用包內(nèi)部的數(shù)據(jù)時(shí),可以使用匿名導(dǎo)入包。具體的格式如下:

import _  "包的路徑"

匿名導(dǎo)入的包與其他方式導(dǎo)入的包一樣都會(huì)被編譯到可執(zhí)行文件中。

init()初始化函數(shù)

init()函數(shù)介紹

在Go語言程序執(zhí)行時(shí)導(dǎo)入包語句會(huì)自動(dòng)觸發(fā)包內(nèi)部init()函數(shù)的調(diào)用,需要注意的是:init()函數(shù)沒有參數(shù)也沒有返回值。init()函數(shù)在程序運(yùn)行時(shí)自動(dòng)被調(diào)用執(zhí)行,不能在代碼中主動(dòng)調(diào)用它。
包初始化執(zhí)行的順序如下圖所示:

go語言碎片整理之包

init()函數(shù)執(zhí)行順序

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

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)頁題目:go語言碎片整理之包-創(chuàng)新互聯(lián)
文章URL:http://bm7419.com/article4/dpccoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、網(wǎng)站改版、域名注冊(cè)、網(wǎng)站制作做網(wǎng)站、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)