【原創】go語言學習(十一)package簡介

  • 2019 年 11 月 6 日
  • 筆記

目錄

  • Go源碼組織方式
  • main函數和main包
  • 編譯命令
  • 自定義包
  • init函數以及執行行順序
  • _標識符

Go源碼組織方式

1、 Go通過package的方式來組織源碼

package 包名  

  注意:任何一個源碼都屬於一個包

  作用:程式碼復用和可讀性

2、可執行程式的包名必須為main,並且包含一個main函數

package main  import (      "fmt"  )  func main() {      fmt.Println(“hello world”)  }  

  

 3、package組織案例例

再src/calc的包編輯完成後再pkg中

main函數和main包

 1、鏈接工程

package main  — |            靜態鏈接

            |———————-> 可執行文件

pkg/windows_amd64/…/*.a —|

自定義包

 1、除了可執行程式之外,用戶可以寫自定義包,自定義包編譯成靜態庫

package calc    // package calc2 不建議這麼寫    // 包組織方式,自定義包  // 使用go install生成靜態庫  // calc_test中調用靜態庫    var (  	Sum int  )    func Add(a int, b int) int {  	return a + b  }    // 小寫方法名為私有,不能調用  func sub(a int, b int) int {  	return a - b  }  

  

package main    import (  	"fmt"  	"github.com/gostudy/listen11/calc"  	// _ 沒有引用保留包  	// _ "github.com/gostudy/listen11/calc"  )    // 調用pkgwindows_and64githbu.comgostudylisten11calc.a    // 執行全局變數,再執行init初始化  var a int = 10  var b int = 10    // init 函數,再main函數之前執行  func init() {    	fmt.Println(a, b)    	fmt.Println("init func in main")  }    // init函數可以多個,可以有多文件,多init,按編譯順序執行  // 1初始化sub 包  // 2初始化add import  // 3初始化main  func init() {  	fmt.Println("init2 func in main")  }    func main() {  	var sum = calc.Add(2, 3)  	fmt.Printf("sum=%dn", sum)  }  

  注意:go_path 要配置好路徑

編譯命令

1、go run運⾏行行go程式碼, 如果有多個⽂文件,需要把所有⽂文件都寫到go run後⾯面

2、go build 編譯go程式碼,如果是可執行程式,默認會在當前⽬目錄⽣生成可執行程式,可以使⽤用-o指定可執行程式生成的目錄。

3、go install編譯go程式碼,並且把可執行程式拷貝到GOPATH的bin目錄,自定義或第三方包會拷貝到GOPATH的pkg目錄

init函數以及執行行順序

1、一個包里可以有0個或多個init函數,在程式啟動時會被自動調用

package calc  import (      "fmt"  )  // 先執⾏行行全局  // 變數量初始化  var a int=10    // 然後再執行  // init函數  func init() {  }    // 最後執行  // main函數  func Add(a, b int) int{      return a+b  }  

  

2、 如果一個包import另外一個包

 

_標識符

1、_ 沒有引用保留包

package calc  import (  “fmt"  _ “sub”  )  func Add(a, b int) int{  return a+b  }