问题来源于编写代码时,某些功能需要复用,于是我把它们功能提出来放到单独的utils.go文件中。但是却不知道该怎么import自己的go文件,使得能调用其中的函数,故做此笔记。供使用GoLand开发的童靴参考。
1、引入:默认GOPATH的解决方法
原理:根据go项目工程结构来看,我们需要在$GOPATH/src
目录下存放go文件,才能正常引用。按照错误提示,选择Create Directory practice at D:/Go/src
,再在其中practice
文件夹中放入go文件即可正确引用
但我希望把要引用的包和其他代码就放在同一个项目里,这种方法显然不行,于是我们需要配置GoLand以便支持自定义包在项目中的导入。
2、修改GOPATH的解决方法
2.1、规范的目录结构
摘取官方文档的说法:
Go代码必须放在工作空间 ($GOPATH) 内。它其实就是一个目录,其中包含三个子目录:
src
目录包含Go的源文件,它们被组织成包(每个子目录都对应一个包)pkg
目录包含包对象bin
目录包含可执行命令
go
工具用于构建源码包,并将其生成的二进制文件安装到 pkg 和 bin 目录中。
src
子目录通常包会含多种版本控制的代码仓库 (例如Git或Mercurial), 以此来跟踪一个或多个源码包的开发。
.
├── bin/
| ├── streak #可执行命令
| └── todo #可执行命令
├── pkg/
| └── windows_amd64/
| └── ...
└── src/
├── common/
| ├── ...
| └── utils.go
├── other/
| ├── ...
| └── ...
└── main/
└── main.go
所以,我们的项目应该按这种目录存放文件。将编写的源代码放入src
目录中。
2.2、GoLand修改Project GOPATH
打开GoLand -> File -> Settings
-> 展开Go -> GOPATH -> 在下方的"Project GOPATH"中添加项目所在文件夹 -> OK
2.3、示例:导入自定义包
在main.go
中,引入common
包下的utils.go
,并使用UtilsFunc()
函数:
import (
...
"common" //utils.go文件必须放在common文件夹下,第一句声明为package common
)
func funcname() {
...
temp := common.UtilsFunc() //调用utils.go中的函数,需要通过包名common来调用
_ = temp
}
3、公共参数和函数的要求
在Go语言中严格区分字母大小写。
- 如果变量名/函数名/常量名首字母大写,则可以被其他包访问(公有)
- 如果变量名/函数名/常量名首字母小写,则不能被其他包访问(私有)
可以同时声明 str 和 Str 两个变量!其中str只能被本包访问,Str能被其他包访问。
在utils.go
中声明var str string
和var Str string
,其他包中查看到的情况:
参考文章
[2] GoLand导入自定义包
搭建Go开发环境(包括Linux、Windows、Mac)、GOPATH目录含义、go项目工程结构、如何使用命令行安装程序(
go install
)、跨平台编译、获取远程包、获取gitlab私有库包等可以继续查看第一篇参考文章。