Go语言的包管理

栏目: Go · 发布时间: 7年前

内容简介:Go 语言的源码复用建立在包(package)基础之上。包通过 package, import, GOPATH 操作完成。Go 语言的入口 main() 函数所在的包(package)叫 main,main 包想要引用别的代码,需要import导入!Go 语言的包与文件夹一一对应,同一个目录下的所有.go文件的第一行添加 包定义,以标记该文件归属的包,演示语法:

1 概述

Go 语言的源码复用建立在包(package)基础之上。包通过 package, import, GOPATH 操作完成。

2 main包

Go 语言的入口 main() 函数所在的包(package)叫 main,main 包想要引用别的代码,需要import导入!

3 包定义,package

Go 语言的包与文件夹一一对应,同一个目录下的所有.go文件的第一行添加 包定义,以标记该文件归属的包,演示语法:

package 包名

包需要满足:

  • 一个目录下的同级文件归属一个包。
  • 包名可以与其目录不同名。
  • 包名为 main 的包为应用程序的入口包,其他包不能使用。

包可以嵌套定义,对应的就是嵌套目录,但包名应该与所在的目录一致,例如:

// 文件:foo/bar/tool.go中
package bar
// 可以被导出的函数
func FuncPublic() {
}
// 不可以被导出的函数
func funcPrivate() {
}

包中,通过标识符首字母是否大写,来确定是否可以被导出。首字母大写才可以被导出,视为 public 公共的资源。

4 导入包,import

要引用其他包,可以使用 import 关键字,可以单个导入或者批量导入,语法演示:

// 单个导入
import "package"
// 批量导入
import (
  "package1"
  "package2"
  )

导入时,可以为包定义别名,语法演示:

import (
  p1 "package1"
  p2 "package2"
  )
// 使用时
p1.Method()

以上测试请使用系统包测试。若需要导入自定义包,需要设置GOPATH环境变量。

4 GOPATH环境变量

import导入时,会从 GO 的安装目录(也就是GOROOT环境变量设置的目录)和GOPATH环境变量设置的目录中,检索 src/package 来导入包。如果不存在,则导入失败。

GOROOT,就是GO内置的包所在的位置。

GOPATH,就是我们自己定义的包的位置。

通常我们在开发Go项目时,调试或者编译构建时,需要设置GOPATH指向我们的项目目录,目录中的src目录中的包就可以被导入了:

例如,我么的项目目录为: D:\projects\goProject,那么我么就需要将我们的源代码放在 D:\projects\goProject\src 下,同时设置GOPATH为 D:\projects\goProject。设置GOPATH的方案有:

  • windows 通过 系统->系统信息->高级系统设置->环境变量 中完成设置。
  • windows 中通过 CMD 或者 powershell 也可以完成设置。通常是临时有效的,CMD或者powershell关闭失效!
    CMD:
    set GOPATH=D:\projects\goProject
    set GOPATH 可以查看
    powershell:
    $env:GOPATH="D:\projects\goProject"
    $env:GOPATH 可以查看
  • linux 通过 /etc/profile 进行设置

5 init() 包初始化

可以在源码中,定义 init() 函数。此函数会在包被导入时执行,例如如果是在 main 中导入包,包中存在 init(),那么 init() 中的代码会在 main() 函数执行前执行,用于初始化包所需要的特定资料。例如:

包源码:

src/userPackage/tool.go

package userPackage
import "fmt"
func init() {
  fmt.Println("tool init")
}

主函数源码:

src/main.go

package main
import (
  "userPackage"
  )
func main() {
  fmt.Println("main run")
  // 使用userPackage
  userPackage.SomeFunc()
}

执行时,会先输出 "tool init",再输出 "main run"。

如果仅仅需要导入包时执行初始化操作,并不需要使用包内的其他函数,常量等资源。则可以在导入包时,匿名导入:

import (
  _ "userPackage"
  )

使用下划线作为包的别名,会仅仅执行init()

完!

原文出自: 小韩说课

微信关注:小韩说课

Go语言的包管理

以上所述就是小编给大家介绍的《Go语言的包管理》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

剑指Offer:名企面试官精讲典型编程题(第2版)

剑指Offer:名企面试官精讲典型编程题(第2版)

何海涛 / 电子工业出版社 / 2017-5 / 65.00

《剑指Offer:名企面试官精讲典型编程题(第2版)》剖析了80个典型的编程面试题,系统整理基础知识、代码质量、解题思路、优化效率和综合能力这5个面试要点。《剑指Offer:名企面试官精讲典型编程题(第2版)》共分7章,主要包括面试的流程,讨论面试每一环节需要注意的问题;面试需要的基础知识,从编程语言、数据结构及算法三方面总结程序员面试知识点;高质量的代码,讨论影响代码质量的3个要素(规范性、完整......一起来看看 《剑指Offer:名企面试官精讲典型编程题(第2版)》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具