golang 笔记,package

学习go语言时,有些疑惑目录与其下package的关系,在知乎上遇到一个解答,如下:
在这里插入图片描述


下面是有关go语言调用其他目录下的库函数的示例。

关于go的package:引用文章https://zhuanlan.zhihu.com/p/91627930
在这里插入图片描述

go导包测试

通过import+目录 导入我们所需的库。需要注意的是,该目录下所有的go文件有且只有一个package类型。即如下图所示的目录结果中,src/main/study目录下,add.go与func_.go用该引用同一个package-name。

目录结构:
在这里插入图片描述

正常导入包

在与src/main的同级目录中有,src/tool,package-name为 tool。
在这里插入图片描述
我们在src/main目录下有个main.go将作为测试的程序,我们通过import导入其路径 ../tool
在这里插入图片描述

tool目录下存在多个相同的package

import的时候,会将其下所有的go文件都引入,而通常一个目录下只能有一个package。

现在,mylib.go 与 mylib2.go 都使用 tool 作为package-name。
在这里插入图片描述
运行正常,因为在 /src/tool 目录下只有一个 package。

在这里插入图片描述

tool目录下存在多个不同的package导致导入包失败

将mylib2.go中的package修改成,tool2。则在 src/tool 目录下就存在多个package-name。

则, 运行main.go 失败
在这里插入图片描述

导入src/main/study下的包

我们在试一下,导入当前目录的下级目录中的库。

例如在 ./study 目录下 Add函数,实现对两个参数的加和。
在这里插入图片描述
Func函数中,使用了一个匿名函数(闭包),在闭包中调用了Add函数对参数求和。而Func函数的返回值类型是一个对1,3求和的函数。
在这里插入图片描述
运行结果:
在这里插入图片描述

在下级目录,可以单独拥有package-name

每个目录下所有的go文件都应该使用同一个package-name,同时该目录的下级目录却可以拥有自己的package-name。

示例:每个go程序的的入口由 package-name 为main的程序中,main函数开始。如果想测试我们写好的库,可以在当前目录中创建一个子目录,用于临时执行测试函数功能。

例如,我们在 src/tool 目录下,新建一个main目录,在该目录中编写一个main.go用于测试 mylib.go 库的执行情况。
在这里插入图片描述
src/tool/main.go
在这里插入图片描述
执行main.go程序。
在这里插入图片描述


补充:

GOROOT和GOPATH
参考https://blog.csdn.net/qq_38151401/article/details/105729884

  • GOPATH:GO语言使用的一个环境变量,使用绝对路径提供项目的工作目录。
  • GOROOT:GOROOT就是Go的安装目录

GOPATH可以设置多个,其中,第一个将会是默认的包目录,使用 go get 下载的包都会在第一个path中的src目录下,使用 go install时,在哪个GOPATH中找到了这个包,就会在哪个GOPATH下的bin目录生成可执行文件

当引入module时,首先在GOROOT的src目录下查找,然后再GPOPATH的src目录下查找

通过 go env 命令查看

包引用格式
Go包的引入格式常见的有四种,下面以引用fmt包为例说明:

  • 标准引用, import fmt, 使用fmt.Println()调用函数
  • 设置别名引用, import format fmt ,可以format.Println()调用函数
  • 省略方式的引用 import . fmt,相当于把包fmt的命名空间合并到当前程序的命名空间
  • 仅执行包的初始化函数, import _ fmt

猜你喜欢

转载自blog.csdn.net/weixin_43919932/article/details/122178141