包:

包其实就是文件夹,go的源文件就是文件,把所有的文件分类放到不同的包利于管理。

作用:

  1. 如果把所有的代码都放在一个文件中,后续的可维护性、阅读性都比较差。所以可以使用包的来区分不同的模块/功能分别放在不同包中。然后其它的文件使用到功能就调用就可以了。
  2. 在同一个包下是函数和全局变量(局部变量可以)是不能重名的,但是不同包就可以。
  3. 如果是不想被调用包下的函数(私有)可以以小写字母开头命名函数,如果是想调用其它包的函数,被调用的函数必须是大写字母开头的。

声明:

包的声明不是你的包叫什么,你就可以用这个名字调用,而是代码最上面的package决定的

例:创建2个包分别是main、bao

  • main包下有main.go
  • bao下有bao.go
  • 使用main去调用bao.go时,一定要把bao.go中的package后面的名字换成bao
import函数名首字母必须是大写的
package bao    // 打包:package后面的名称就是以后这个文件要被调用的名称,这里要和文件名保持一致,比如这个文件是bao.go,那这里也叫bao

import "fmt"  // 这里是引入文件所在包的路径

func Get() {
	fmt.Println("Get 函数被调用")
}

调用:

package main // main包

import "go_basics/bao"   // 这里是引入文件所在包的路径

func main() {
	bao.Get()
}

多个包调用:

package main

import "go_basics/bao"   // 方式1是逐个管理

import (  // 方式2是统一管理
	"fmt"
	"go_basics/bao"
)

简化版调用:

package main

import (
	."fmt" // 使用点调用,下面就不需要再写fmt了
  "fmt" // 不使用点调用,就必须是【包名.函数】才能使用
)

func main() {
	Println()     // 使用点调用
  fmt.Println() // 不使用点调用
}

取别名方式调用:

如果包名比较长,为了简化,就可以用这种方式了,但是后续必须用别名调用内部的函数和变量

package main

import alias "go_basics/bao"   // 这里我把上面的bao名称使用别名alias代替了,下面调用的时候就可以直接用alias.Get方法了,不能再用bao.Get了

func main() {
	alias.Get()
}

包引用后不适用会报错,可以使用占位符忽略报错信息

package main

import (
	_ "fmt" // 加上下划线就可以忽略报错了,就是引入了包没有调用其中的函数,仅会执行包下的init函数
)

func main() {}