让你的Golang项目在IDE里跑起来(Goland使用入门-GOROOT、GOPATH、src、 pkg、bin、import)

简介: 让你的Golang项目在IDE里跑起来(Goland使用入门-GOROOT、GOPATH、src、 pkg、bin、import)

aHR0cHM6Ly9jb2RpbmczbWluLm9zcy1hY2NlbGVyYXRlLmFsaXl1bmNzLmNvbS9jb2RpbmczbWluLzIwMjAtMDMtMDktMTQ1NDU5LmpwZw.png

前言


每次新建项目,不熟悉go的项目结构,一般跑都跑不起来,每次都要重新搞一遍,好几回跑项目都会报类似File is invalid的错误


image.png


有时候报其他奇怪的错误,今天就下决心整理一下,理一理概念 GOROOT、GOPATH、src、 pkg、bin,希望以后不要再出现这样的问题了,同时给看到文章的你一些帮助。


熟悉golang项目目录结构


要想让你的程序跑起来,要按照这样的目录结构,正常情况下有三个目录:

|--bin
|--pkg
|--src


其中,bin存放编译后的可执行文件;pkg存放编译后的包文件;src存放项目源文件。一般,bin和pkg目录可以不创建,go命令会自动创建(爽否?),只需要创建src目录放代码即可。


我创建一个src目录,下面再创建一个叫main的项目(可以叫任何名字,我只是示例叫main),里面只有一个main.go文件。


aHR0cHM6Ly9jb2RpbmczbWluLm9zcy1hY2NlbGVyYXRlLmFsaXl1bmNzLmNvbS9jb2RpbmczbWluLzIwMjAtMDMtMDgtMTYyMzAxLmpwZw.png

他的内容是:


package main
import "fmt"
func main() {
  fmt.Println("hello world")
}


这样一个简单的项目就创建好了,创建好只是第一步,下面让她跑起来。

让她跑起来

找到配置,Goland里面大多数的配置都在这里。

aHR0cHM6Ly9jb2RpbmczbWluLm9zcy1hY2NlbGVyYXRlLmFsaXl1bmNzLmNvbS9jb2RpbmczbWluLzIwMjAtMDMtMDgtMTY0NTUwLnBuZw.png


配置你的GOROOT,配置成你安装的go路径,Goland会自动识别,这就是GOROOT的作用,和JAVA_HOME的作用差不多。

image.png


配置GOPATH,你的项目放在src下面不是随随便便就放的,得让go知道你这些个项目基于哪个位置。


image.png


细心的人注意到,这里有一个Project GOPATH,还有一个Global GOPATH,把你的项目配置在Project GOPATH里,每个项目都不一样,创建另一个项目时这个路径要配置成新项目的。


Global GOPATH可以弄一个公共项目,以后就把第三方的包直接装到这里,就可以自动在你的项目里引用了。


调出ToolBar,开始配置运行文件


aHR0cHM6Ly9jb2RpbmczbWluLm9zcy1hY2NlbGVyYXRlLmFsaXl1bmNzLmNvbS9jb2RpbmczbWluLzIwMjAtMDMtMDgtMTYyNzA1LnBuZw.png


在ToolBar中Add Configuration


aHR0cHM6Ly9jb2RpbmczbWluLm9zcy1hY2NlbGVyYXRlLmFsaXl1bmNzLmNvbS9jb2RpbmczbWluLzIwMjAtMDMtMDktMDQyOTAxLmpwZw.png

创建一个go build,可以看到有一个go remote的选项,它是用来调试远程服务器上的代码的,有兴趣关注我,我后续更新。

aHR0cHM6Ly9jb2RpbmczbWluLm9zcy1hY2NlbGVyYXRlLmFsaXl1bmNzLmNvbS9jb2RpbmczbWluLzIwMjAtMDMtMDktMDQzMDAxLnBuZw.png


注意这三个位置,

选File,运行文件就选main函数所在在文件main.go,输出文件夹就在和src同级目录的bin文件夹(自动创建),Working directory目录就是刚刚设置GOPATH的目录(自动)


aHR0cHM6Ly9jb2RpbmczbWluLm9zcy1hY2NlbGVyYXRlLmFsaXl1bmNzLmNvbS9jb2RpbmczbWluLzIwMjAtMDMtMDktMDQzNTU4LmpwZw.png

注意,如果你多次打开目录选择,框框里的目录不会被替换掉,而是追加,导致运行的时候报错,除非你想一次性编译多个项目。


例如这样:

/Users/pzqu/Documents/code/go/what_go/src/main/main.go|/Users/pzqu/Documents/code/go/what_go/src/main/main.go

aHR0cHM6Ly9jb2RpbmczbWluLm9zcy1hY2NlbGVyYXRlLmFsaXl1bmNzLmNvbS9jb2RpbmczbWluLzIwMjAtMDMtMDktMDQ1MTI3LmpwZw.png


点击OK保存,之后,在ToolBar上点击运行,旁边那个符号是debug


aHR0cHM6Ly9jb2RpbmczbWluLm9zcy1hY2NlbGVyYXRlLmFsaXl1bmNzLmNvbS9jb2RpbmczbWluLzIwMjAtMDMtMDktMDQzODIzLnBuZw.png


成功运行!自动创建了bin目录


aHR0cHM6Ly9jb2RpbmczbWluLm9zcy1hY2NlbGVyYXRlLmFsaXl1bmNzLmNvbS9jb2RpbmczbWluLzIwMjAtMDMtMDktMDQzODU4LmpwZw.png

如果你想改输出的二进制文件名,可以在这里添加参数-o bin/main

aHR0cHM6Ly9jb2RpbmczbWluLm9zcy1hY2NlbGVyYXRlLmFsaXl1bmNzLmNvbS9jb2RpbmczbWluLzIwMjAtMDMtMDktMDQ0MDUyLmpwZw.png


如何在一个项目中使用其他项目?


引用自己的项目中的其他模块包


写一个新函数func Add(a, b int) int,放在src下面main项目,calc文件夹,add.go文件里

|____src
| |____main
| | |____calc
| | | |____add.go
| | |____main.go

代码如下


package calc
func Add(a, b int) int {
  return  a + b
}


在main函数中调用他

aHR0cHM6Ly9jb2RpbmczbWluLm9zcy1hY2NlbGVyYXRlLmFsaXl1bmNzLmNvbS9jb2RpbmczbWluLzIwMjAtMDMtMDktMDUwMDMzLmpwZw.png


输出结果:

aHR0cHM6Ly9jb2RpbmczbWluLm9zcy1hY2NlbGVyYXRlLmFsaXl1bmNzLmNvbS9jb2RpbmczbWluLzIwMjAtMDMtMDktMDUwNjAxLmpwZw.png


几个点需要注意:


add.go中的Add函数名首字母必须大写, 比如Add, Addxxx.只有大写的才是Public权限,外面的包才能访问,否则只能自己文件夹下代码才能访问

2. add.go的改名为addyyy.go也可以,查找add包的时候,并不会根据add.go这个文件名来查找。而是根据文件夹名来查找,一个文件夹下的所有文件都属于同一个包。所以函数变量自然不能重复。


main中调用add.Add(1,2)时,add是包, 必须跟add.go中的package处的包名一致,否则报错。


import后, 怎么去查找对应的包呢? 思考一下, 很简单,无非就是GOROOT和GOPATH. 也应该明白了, src这个目录名可不是能随便取的。


引用第三方项目


自己写的其他项目引入,比如我这有一个叫common的公共包,你的公司有可能把很多go包下载下来,做一个公共仓库,方便公司内网隔离。


aHR0cHM6Ly9jb2RpbmczbWluLm9zcy1hY2NlbGVyYXRlLmFsaXl1bmNzLmNvbS9jb2RpbmczbWluLzIwMjAtMDMtMDktMTQ0NjM3LmpwZw.png

代码很简单

package dance
import "fmt"
func WhoDance() {
  fmt.Println("you")
}

main里面调用

package main
import "common/dance"
func main() {
  dance.WhoDance()
}


输出

you
Process finished with exit code 0


还有一个相当好用的引用第三方项目的工具,vendor关注我的博客,我们后续再见。

相关文章
|
6月前
|
IDE 开发工具 C++
QT案例IDE编写 -- 创建项目
QT案例IDE编写 -- 创建项目
77 0
|
16天前
|
IDE 开发工具 C++
AvaloniaUI项目离线开发全攻略:IDE安装、模板应用与NuGet私有化部署一站式解决
本文详细介绍了在离线环境中开发Avalonia UI项目的完整解决方案,包括Visual Studio 2022和JetBrains Rider的离线安装、Avalonia UI模板的配置、私有NuGet服务的部署与使用,以及NuGet包的制作和上传。通过这些步骤,您可以在网络受限或完全离线的环境中顺利进行Avalonia UI项目的开发。
AvaloniaUI项目离线开发全攻略:IDE安装、模板应用与NuGet私有化部署一站式解决
|
2月前
|
Go
Golang语言基于GOPATH方式管理包(package)
这篇文章详细介绍了Golang语言中基于GOPATH方式管理包(package)的方法,包括包的概述、定义、引入格式、别名使用、匿名引入,以及如何快速入门自定义包,并通过具体代码案例展示了包的环境准备、代码编写、细节说明和程序运行。
37 3
|
5月前
|
存储 安全 Java
2024ide构建maven项目是总是卡在解析Maven依赖项目 加速方案
2024ide构建maven项目是总是卡在解析Maven依赖项目 加速方案
239 4
2024ide构建maven项目是总是卡在解析Maven依赖项目 加速方案
|
6月前
|
存储 测试技术 Go
Golang框架实战-KisFlow流式计算框架(2)-项目构建/基础模块-(上)
KisFlow项目源码位于<https://github.com/aceld/kis-flow,初始阶段涉及项目构建和基础模块定义。首先在GitHub创建仓库,克隆到本地。项目目录包括`common/`, `example/`, `function/`, `conn/`, `config/`, `flow/`, 和 `kis/`。`go.mod`用于包管理,`KisLogger`接口定义了日志功能,提供不同级别的日志方法。默认日志对象`kisDefaultLogger`打印到标准输出。
663 5
Golang框架实战-KisFlow流式计算框架(2)-项目构建/基础模块-(上)
|
6月前
|
Go 开发者
Golang深入浅出之-Go语言项目构建工具:Makefile与go build
【4月更文挑战第27天】本文探讨了Go语言项目的构建方法,包括`go build`基本命令行工具和更灵活的`Makefile`自动化脚本。`go build`适合简单项目,能直接编译Go源码,但依赖管理可能混乱。通过设置`GOOS`和`GOARCH`可进行跨平台编译。`Makefile`适用于复杂构建流程,能定义多步骤任务,但编写较复杂。在选择构建方式时,应根据项目需求权衡,从`go build`起步,逐渐过渡到Makefile以实现更高效自动化。
91 2
|
6月前
|
存储 Go
Golang深入浅出之-Go语言依赖管理:GOPATH与Go Modules
【4月更文挑战第27天】Go语言依赖管理从`GOPATH`进化到Go Modules。`GOPATH`时代,项目结构混乱,可通过设置多个工作空间管理。Go Modules自Go 1.11起提供更现代的管理方式,通过`go.mod`文件控制依赖。常见问题包括忘记更新`go.mod`、处理本地依赖和模块私有化,可使用`go mod tidy`、`replace`语句和`go mod vendor`解决。理解并掌握Go Modules对现代Go开发至关重要。
119 2
|
6月前
|
Go
golang学习3,golang 项目中配置gin的web框架
golang学习3,golang 项目中配置gin的web框架
|
6月前
|
Go
第十二章 Golang家庭收支记账软件项目
第十二章 Golang家庭收支记账软件项目
85 2
|
6月前
|
IDE 开发工具 Windows
DevEco Studio IDE 创建项目时候配置环境
DevEco Studio IDE 创建项目时候配置环境
81 0