从0开始学GO之包与工程管理


更多参见: 从0开始学GO之目录

Go语言的源码复用是建立在包(package)基础之上的。

包介绍

包(package)是多个Go源码的集合,是一种高级的代码复用方案,Go语言为我们提供了很多内置包,如fmtosio等。

定义包

一个包可以简单理解为一个存放.go文件的文件夹。 该文件夹下面的所有go文件都要在代码的第一行添加如下代码,声明该文件归属的包。

package 包名

注意事项:

  • 一个文件夹下面只能有一个包,同样一个包的文件不能在多个文件夹下。
  • 包名可以不和文件夹的名字一样,包名不能包含-符号。
  • 包名为main的包为应用程序的入口包,编译时不包含main包的源代码时不会得到可执行文件。

创建的的自定义包最好放在GOPATH的src目录下(或者GOPATH src的某个子目录)。

包中成员以名称⾸字母⼤⼩写决定访问权限:

  • public: ⾸字母⼤写,可被包外访问
  • private: ⾸字母⼩写,仅包内成员可以访问

注意:同一个目录下不能定义不同的package

包的导入

要在代码中引用其他包的内容,需要使用import关键字导入使用的包。具体语法如下:

import "包的路径"

注意事项:

  • import导入语句通常放在文件开头包声明语句的下面。
  • 导入的包名需要使用双引号包裹起来。
  • 包名是从$GOPATH/src/后开始计算的,使用/进行路径分隔。
import "包1"
import "包2"
// 或者
import (
    "包1"
    "包2"
)

自定义包名

在导入包名的时候,我们还可以为导入的包设置别名。具体语法格式如下:

import 别名 "包的路径"

匿名导入包

如果只希望导入包,而不使用包内部的数据时,可以使用匿名导入包。具体的格式如下:

import _ "包的路径"

匿名导入的包与其他方式导入的包一样都会被编译到可执行文件中。

init()初始化函数

在Go语言程序执行时导入包语句会自动触发包内部init()函数的调用。需要注意的是: init()函数没有参数也没有返回值。

package main
import "fmt"

var x = 1024

func init()  {
	fmt.Println(x)
}
func main()  {
	fmt.Println("Hello World!")   
}

在这里插入图片描述

全局声明 -----> init() ----->main()

Go语言包会从main包开始检查其导入的所有包,每个包中又可能导入了其他的包。Go编译器由此构建出一个树状的包引用关系,再根据引用顺序决定编译顺序,依次编译这些包的代码。

在运行时,被最后导入的包会最先初始化并调用其init()函数, 如下图示:

在这里插入图片描述

图片来自 https://www.cnblogs.com/aaronthon/p/10776341.html

代码示例见下 工程管理

init()函数与main()函数对比

  • 都是go语言中的保留函数。init()用于初始化信息,main()用于座位程序入口。
  • 两个函数定义的时候,不能有参数和返回值,只能由go程序自动调用,不能被引用。
  • init()函数可以定义在任意包中,可以有多个。main()函数只能在main包下,并且只能有一个。
  • 存在依赖的包之间不能循环导入。
  • 一个包可以被其他多个包import,但是只能被初始化一次。

工程管理

Go命令行工具完全用目录结构和包名来推导工程结构和构建顺序。如下图

在这里插入图片描述

图片来自 : 01 | 工作区和GOPATH https://time.geekbang.org/column/article/12959

这里如下图 修改 环境变量GOPATH 包含 工作区HelloWorld,如果还有其他工作区继续添加 环境变量GOPATH 包含路径

GOPATH:若干工作区目录的路径。是我们自己定义的工作空间。

在这里插入图片描述

src目录下各种目录为各种包如下图

在这里插入图片描述

GitHub:

输出:

在这里插入图片描述

命令工具使用

也可以手动使用GO命令工具

确认路径,可以使用 命令 go env 当然也可以查看环境变量

在这里插入图片描述

GOBINgo install 安装目录

在工作区执行命令 go build

在这里插入图片描述

在工作区执行命令 go installGOBIN 中出现 可执行文件

在这里插入图片描述

GoLand 输出目录设置

在这里插入图片描述

个人能力有限,如有错误或者其他建议,敬请告知欢迎探讨,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值