­

【原创】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  }