Go package 包

发布时间: 更新时间: 总字数:947 阅读时间:2m 作者: IP上海 分享 网址

Golang中包(Package)是函数和数据(如常量)的集合,它将相关特性的函数和数据放在统一的文件或文件夹中进行管理。

介绍

  • 包是 Golang 中代码发布的独立单位,可以提供给其他项目使用
  • Golang 源代码文件使用 package 在文件头声明包,有以下几个作用
    • 限定包内成员对外的访问属性(同一个包内是共享的)
    • 告诉编译器包的文件范围
    • 在包外,可以使用 import 关键字导入对应的包名
  • 包名命名规则
    • 小写字母组成,通常与所在的文件夹名称保持一致
    • 同一个目录下的 包名 必须一致
    • Golang 规定,package main 是主函数(可运行的程序)所在的包,其他的均为库文件的形式存在

常见的包和函数

  • main 包:用来告诉编译器将包编译为二进制的可执行文件
    • main() 函数:二进制程序的入口,无返回值、无参数
  • init() 函数 是 Golang 内置函数,用来初始化包使用。无返回值、无参数。一般每个包只定义一个。
    • init() 函数导入(import)包 时自动被调用(在常量、全局变量声明后面)
    • 执行顺序:顺序 import 的 init() 函数 > main 包的 init() 函数 > main() 函数 先调用
    • 作用:用于初始化操作,如数据库连接池建立等

包导入方式

  • 绝对路径导入:import <路径>
  • 相对路径导入:import ./<相对路径> 不推荐使用
  • 别名导入:import <alaise-name> "<路径>" 解决多个包名冲突问题
  • 下划线导入:import _ <路径> 使用空白符导入的包可以不使用,但一般在对应的文件中定义初始化函数 func init() {}
  • 点导入:import . <路径> 将路径下所有变量都导入,可能存在冲突,不推荐使用

说明:

  • <路径> 一般是 <$GOPATH/src 下的子目录>
  • 若使用 go modules,需要使用 modules-name/pkg-name 格式导入包

引用其他包示例

package main

import (
	"fmt"

	"github.com/xiexianbin/gseo/utils"
)

func main() {
	fmt.Println(utils.EId())
}

其中 github.com/xiexianbin/gseo/utils 是已经发布到 github 的包

包成员可见性

Golang 使用名称首字母大小写判断对应(函数、常量、变量、结构体等)的访问权限

  • 首字母大写:包外可见(类似于 javapublic
  • 首字母小写:包外不可见(类似于 javaprivate

Go vendor 机制

将 golang 项目依赖包安装到项目根目录的 vendor 目录下(类型与 src 的目录结构),在编译项目时,使用该 vendor 目录中的依赖源码包,该方式解决如下问题:

  • 依赖的兼容性,不同项目对包依赖不同
  • 本地存储依赖代码,防止因原始仓库变动导致该项目编译失败问题

此时,包的搜索顺序:

项目根目录 vendor 目录 -> $GOPATH/src 相关目录 -> $GOPATH 目录 -> $GOROOT 目录(系统包)
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数