1. 程式人生 > 其它 >第二篇:go包管理

第二篇:go包管理

第二篇:go包管理

目錄

一、包管理

1 包

即模組,組織go原始碼,提供了更好的可重用性和可用性。

每個檔案中第一行是package packagename,代表指定了該檔案屬於那個包。

2 自定義包

  • go語言的程式碼必須放在gopath的src路徑下;

  • 包匯入是從gopath的src路徑下開始檢索(開始找)【並非是在該專案下查詢】;

  • 除了main包以外,建議包名就叫資料夾名,一個資料夾下的包名必須一致【也可以包名叫mypackage,其中所有檔案中第一行是package test】;

  • 同一個包下,變數,函式只能定義一次【在包中的變數宣告,不能使用a:=10,這種型別,必須使用全定義或者半定義】;

  • 同一個包下的變數和函式可以直接相互使用【可以把包想象為是一整個大的檔案】;

  • 包內的函式或變數,想讓外部包使用,必須首字母大寫;

    package myPackage  // 包內的變數、函式想讓外部使用,必須首字母大寫
    var Name = "yangyi"
    var Age = 18
    
    // 匯入使用
    package main
    
    import (
    	"day01/myPackage"  // 自動進行包的匯入
    	"fmt"
    ) // 內建包
    
    func main() {
    	fmt.Println(myPackage.Name)  
    }
    
    import test "day01/myPackage"  == python中的 import ... as ...
    

    Java中可以使用public private等關鍵字來對外界使用進行限制。【可以使用public private將類封裝成工具類】

  • 以後下的第三方包都是放在gopath的src路徑下【編譯的時候,也就是將第三方包的函式也編譯到可執行檔案中】

3 init函式(特殊函式)

可以在包內的檔案中書寫init函式。

// mypackage包中
package mypackage

import "fmt"

// 特殊函式,初始化函式,在導包的時候就會執行,並且可以定義多個
// 用處: 初始化工作【每次匯入包,執行這個函式】
func init() {
    fmt.Println("我是init函式...")
}

func init1(){
    fmt.Println("我是init函式...")
}

main 包也是會執行init函式,進行初始化。

4 包匯入的幾種方式

  • import "day02/mypackage"

  • import 名字 "day02/mypackage" 包重新命名

    使用方式: 名字.變數/函式

  • import _ "day02/mypackage"包只匯入,不使用

5 go mod模式建立專案

go語言有go mod;python中有虛擬環境;Java中有maven;

go語言沒有一個統一包管理的地址,大家都放到github上。【由於之前下載的包,都會放到src路徑的github.com下,所以,無法實現一個多版本的控制】【哈哈】

1.11版本推出go modules機制,簡稱mod。

set GO111MODULE=on  // windows 將mod開啟
set GO111MODULE=off  // 將mod關閉
export GO111MODULE=on  // linux

建立go mod的兩種方式:

// 第一種:
1 新建一個專案資料夾,如day01專案
2 進入資料夾,開啟cmd,輸入 go mod init day01,會生成 go.mod檔案(該專案名 該專案依賴的go的版本,第三方包版本)
// 下載beego
go get github.com/astaxie/beego

如果沒有go mod,之前會在src路徑的github.com路徑下安裝;有go mod之後,會在pkg的路徑下進行存放。【之後進行第三方包的尋找,不是基於src路徑尋找,而是基於go mod配置的路徑進行尋找】

PS:自己寫的包放在專案中,go sdk就是go的安裝路徑,如果有go mod,第三方包就是pkg路徑下的。

我們這裡需要配置代理,如果不進行配置的話。【速度慢到無法想象】

package main

import (
	"github.com/astaxie/beego"
) // 內建包

func main() {
	beego.Run()  // 啟動beego即可
}

可以把go mod檔案直接拷貝給別人,別人直接使用go install就可以安裝第三方包。