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

  

 

posted @ 2019-11-06 20:22  shuyang  阅读(1063)  评论(1编辑  收藏  举报