天天看點

go語言複數包_04 Go語言之包

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而非空格;對于數字,這會将填充移到正負号之後