1. 程式人生 > >【原創】go語言學習(十一)package簡介

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

目錄

  • 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"
)

// 呼叫pkg\windows_and64\githbu.com\gostudy\listen11\calc.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=%d\n", 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
}