问题来源于编写代码时,某些功能需要复用,于是我把它们功能提出来放到单独的utils.go文件中。但是却不知道该怎么import自己的go文件,使得能调用其中的函数,故做此笔记。供使用GoLand开发的童靴参考。

1、引入:默认GOPATH的解决方法

​ 原理:根据go项目工程结构来看,我们需要在$GOPATH/src目录下存放go文件,才能正常引用。按照错误提示,选择Create Directory practice at D:/Go/src,再在其中practice文件夹中放入go文件即可正确引用

GoLand项目中导入自定义包_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

GoLand项目中导入自定义包_子目录_02

-> 展开Go -> GOPATH -> 在下方的"Project GOPATH"中添加项目所在文件夹 -> OK

GoLand项目中导入自定义包_自定义_03


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 stringvar Str string,其他包中查看到的情况:GoLand项目中导入自定义包_自定义_04


参考文章

[1] Go语言环境搭建详解(2020版)

[2] GoLand导入自定义包

搭建Go开发环境(包括Linux、Windows、Mac)、GOPATH目录含义、go项目工程结构、如何使用命令行安装程序(go install)、跨平台编译、获取远程包、获取gitlab私有库包等可以继续查看第一篇参考文章