Golang語言學習筆記(十)

2022-09-13 10:45:16 字數 3566 閱讀 5957

包(package)是多個go原始碼的集合,是一種高階的**復用方案,go語言為我們提供了很多內建包,如fmt,strconv,sort,errors,time,encoding/json,os,io等。

golang中的包可以分為三種:1.系統內建包 2.自定義包 3.第三方包

系統內建包:golang語言給我們提供的內建包,引入後可直接使用,如fmt,strconv,sort,errors,time,encoding/json,os,io等。

自定義包:開發者自己寫的包

在golnag 1.11 版本之前如果要自定義包,必須把專案放在gopath目錄。go1.11版本之後無需手動配置環境變數,使用go mod管理專案,也不需要非得把專案放到gopath指定目錄下,可以再磁碟任意位置新建專案,go1.13以後可以徹底不要gopath 了。

實際專案開發中,首先在專案目錄中用go mod命令生成乙個go.mod檔案管理專案的依賴。

比如我們的專案檔案放在了demo16這個資料夾,這個時候我們需要在demo16資料夾裡面使用go mod命令生成乙個 go.mod檔案

go mod init 專案名稱

在demo16下建calc資料夾,在calc資料夾下建calc.go檔案

package calc
在demo16下建main.go檔案作為程式主入口,引入calc包

package main

import (

"demo16/calc"

"fmt"

)

包(package)是多個go原始碼的集合,乙個包可以簡單理解為乙個存放多個.go檔案的資料夾。該資料夾下面的所有go檔案都要在**第一行新增如下**,宣告該檔案歸屬的包。

package 包名
注意事項:

如果想在乙個包中引用另外乙個包裡的識別符號(如變數,常量,型別,函式等)時,該識別符號

單行匯入

單行匯入的格式如下:

import "包1"

import "包2"

多行匯入多行匯入的格式如下:

import (

"包1"

"包2"

)

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

import _ "包的路徑"
匿名匯入的包與其他方式匯入的包一樣都會被編譯到可執行檔案中。

自定義包名

在匯入包名的時候,可以為匯入的包設定別名。通常用於匯入的包名太長或者匯入的包名存在衝突的情況。具體語法格式如下:

import 別名 "包的路徑"
init()函式介紹在go語言程式執行時匯入包語句會自動觸發包內部init函式的呼叫。需要注意的是:init()函式沒有引數也沒有返回值。init()函式在程式執行時自動被呼叫執行,不能再**中主動呼叫它。

包初始化執行的順序如下圖所示:

init函式執行順序

go語言包會從main包開始檢查其匯入的所有包,每個包中又可能匯入了其他的包。go編譯器由此構建出乙個樹狀的包引用關係,再根據引用順序決定編譯順序,依次編譯這些包的**。

在執行時,被最後匯入的包會最先初始化並呼叫其init()函式,如下圖所示

我們可以在 查詢常見的golang第三方包

比如前面用到的解決float精度損失的包decimal

第一種方法:go get 包名稱 (全域性)

go get github.com/shopspring/decimal
第二種方法:go mod download (全域性)

go mod download
第三種方法: go mod vendor 將依賴複製到當前專案的vendor下 (本專案)

go mod vendor
注意:使用go mod vendor 的時候首先需要在專案裡面引入第三方包

包安裝完畢後,可以看文件使用安裝的包

**:demo16/main.go

package main

import (

// "demo16/calc"

"fmt"

// "demo16/tools"

// t "demo16/tools"//使用t作為tools包的別名

)//main包中init函式優先於main函式

func init()

func main()

demo16/calc/calc.go

package calc

import "fmt"

var aaa = "私有變數"//首字母小寫表示私有

var age = "公有變數"

func init()

func add(x, y int) int

func sub(x, y int) int

demo16/tools/tools.go

package tools

import "fmt"

import _ "demo16/calc"

func init()

func printinformation()

demo16/tools/calc.go

package tools

func mul(x, y int) int

demo16/tools/sort.go

package tools

import "fmt"

func sortintasc()

demo16/tools/test.go

package tools

import "fmt"

func printinfo()

func init()

Golang 語言學習筆記 一

1.print println和printf demo01 main.go package main import fmt func main 2.變數的宣告 demo02 main.go package main import fmt func getuserinfo string,int var...

c語言學習筆記十

記憶體與位址 32位x86 從0x0000 0000到0xffff ffff cpu的功能單元 暫存器 register,高速儲存器,像記憶體一樣訪問資料 eax 通用暫存器 ebxecx edxedi ebpeip 程式計數 程式計數器 program counter,指令解碼器 instruct...

c語言學習筆記十

記憶體與位址 32位x86 從0x0000 0000到0xffff ffff cpu的功能單元 暫存器 register,高速儲存器,像記憶體一樣訪問資料 eax 通用暫存器 ebxecx edxedi ebpeip 程式計數 程式計數器 program counter,指令解碼器 instruct...