1、為什麼有包這個概念?
1)開發中,往往要在不同的檔案中調用其他檔案的函數
2)Go代碼最小粒度機關是”包”
3)go的每一個檔案都屬于一個包,通過package管理
4)go以包的形式管理檔案和項目目錄結構
5)包的命名不要和保留名稱重複
6)編譯可執行檔案,必須包含package main,入口函數為main()
2、Go包的作用
1)區分同名的函數、變量等辨別符
2)管理項目程式檔案
3)控制函數、變量通路作用域
4)Go包中的變量,以首字母大小寫決定是否可以被導出(public),如Foo可以被導出,foo則不(internal)
3、Go包目錄結構
1 gostudy2 |
3 +--- bin //go install 安裝目錄。4 | |
5 | +--- hello //可執行指令hello6 |
7 +--- pkg //go build 生成靜态庫 (.a) 存放目錄。8 | |
9 | +---darwin_amd6410 | |
11 | +---lib.a12 | |
13 | +---lib14 | |
15 | +---sublib.a16 |
17 +--- src //項目源碼目錄。18 | |
19 | +---golearn20 |
21 +---learn22 | |
23 | +--- main.go
可以在GOPATH環境變量清單中添加多個工作空間,但不能和GOROOT相同。通常go get使用第一個工作空間儲存下載下傳的第三方庫.
4、Go包的導入
導入包:使用包成員之前,必須先用import關鍵字導入,但是不能形成導入循環
import "相對目錄/包主檔案名"
在導入時,可指定包成員通路方式。比如對包重命名,以避免同名沖突。
import用法:
1 import "fmt"最常用導入系統包2 import "./test"導入目前目錄的包(相對路徑)3 import "gostudy/model 加載gopath/src/gostudy/model子產品(絕對路徑)
4 import f "fmt"導入fmt,且給與别名f,可以通過f. 方式調用函數5 import . "fmt" 将fmt啟用别名".",這樣就可以直接使用其内容,而不用再添加fmt.Println()6 import _ "fmt" 表示不使用該包,而是隻是使用該包的init函數,而不能夠使用該包的其他函數。
文法使用:
1 聲明包2 package 包名3
4 引入包5 import '包的路徑'
5、Go格式化fmt包
golang的fmt包實作了格式化I/O函數,類似于python的{}.format()
普通占位符
1 占位符 說明 舉例 輸出2 %v 相應值的預設格式。 Printf("%v", people) {zhangsan},3 %+v 列印結構體時,會添加字段名 Printf("%+v", people) {Name:zhangsan}4 %#v 相應值的Go文法表示 Printf("%#v", people) main.Human{Name:"zhangsan"}
5 %T 相應值的類型的Go文法表示 Printf("%T", people) main.Human6 %% 字面上的百分号,并非值的占位符 Printf("%%") %
布爾占位符
1 占位符 說明 舉例 輸出2 %t true 或 false。 Printf("%t", true) true
整數占位符
1 占位符 說明 舉例 輸出2 %b 二進制表示 Printf("%b", 5) 101
3 %c 相應Unicode碼點所表示的字元 Printf("%c", 0x4E2D) 中4 %d 十進制表示 Printf("%d", 0x12) 18
5 %o 八進制表示 Printf("%d", 10) 12
6 %q 單引号圍繞的字元字面值,由Go文法安全地轉義 Printf("%q", 0x4E2D) '中'
7 %x 十六進制表示,字母形式為小寫 a-f Printf("%x", 13) d8 %X 十六進制表示,字母形式為大寫 A-F Printf("%x", 13) D9 %U Unicode格式:U+1234,等同于 "U+%04X" Printf("%U", 0x4E2D) U+4E2D
浮點數和複數的組成部分(實部和虛部)
1 占位符 說明 舉例 輸出2 %b 無小數部分的,指數為二的幂的科學計數法,3 與 strconv.FormatFloat 的 'b' 轉換格式一緻。例如 -123456p-78
4 %e 科學計數法,例如 -1234.456e+78 Printf("%e", 10.2) 1.020000e+01
5 %E 科學計數法,例如 -1234.456E+78 Printf("%e", 10.2) 1.020000E+01
6 %f 有小數點而無指數,例如 123.456 Printf("%f", 10.2) 10.200000
7 %g 根據情況選擇 %e 或 %f 以産生更緊湊的(無末尾的0)輸出 Printf("%g", 10.20) 10.2
8 %G 根據情況選擇 %E 或 %f 以産生更緊湊的(無末尾的0)輸出 Printf("%G", 10.20+2i) (10.2+2i)
字元串與位元組切片
1 占位符 說明 舉例 輸出2 %s 輸出字元串表示(string類型或[]byte) Printf("%s", []byte("Go語言")) Go語言3 %q 雙引号圍繞的字元串,由Go文法安全地轉義 Printf("%q", "Go語言") "Go語言"
4 %x 十六進制,小寫字母,每位元組兩個字元 Printf("%x", "golang") 676f6c616e675 %X 十六進制,大寫字母,每位元組兩個字元 Printf("%X", "golang") 676F6C616E67
指針
1 占位符 說明 舉例 輸出2 %p 十六進制表示,字首 0x Printf("%p", &people) 0x4f57f0
其他标記
1 占位符 說明 舉例 輸出2 + 總列印數值的正負号;對于%q(%+q)保證隻輸出ASCII編碼的字元。3 Printf("%+q", "中文") "\u4e2d\u6587"
4 -在右側而非左側填充空格(左對齊該區域)5 #備用格式:為八進制添加前導 0(%#o) Printf("%#U", '中') U+4E2D
6 為十六進制添加前導 0x(%#x)或 0X(%#X),為 %p(%#p)去掉前導 0x;
7 如果可能的話,%q(%#q)會列印原始 (即反引号圍繞的)字元串;
8 如果是可列印字元,%U(%#U)會寫出該字元的
9 Unicode 編碼形式(如字元 x 會被列印成 U+0078 'x')。10 ' ' (空格)為數值中省略的正負号留出空白(%d);11 以十六進制(% x, %X)列印字元串或切片時,在位元組之間用空格隔開12 0 填充前導的0而非空格;對于數字,這會将填充移到正負号之後