专栏首页技术面面观让你的Golang项目在IDE里跑起来(Goland使用入门-GOROOT、GOPATH、src、 pkg、bin...)

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

前言

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

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

熟悉golang项目目录结构

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

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

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

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

他的内容是:

package main

import "fmt"

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

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

让她跑起来

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

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

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

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

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

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

ToolBarAdd Configuration

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

注意这三个位置,

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

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

例如这样:

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

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

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

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

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

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

写一个新函数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函数中调用他

输出结果:

几个点需要注意:

  1. add.go中的Add函数名首字母必须大写, 比如Add, Addxxx.只有大写的才是Public权限,外面的包才能访问,否则只能自己文件夹下代码才能访问
  2. add.go的改名为addyyy.go也可以,查找add包的时候,并不会根据add.go这个文件名来查找。而是根据文件夹名来查找,一个文件夹下的所有文件都属于同一个包。所以函数变量自然不能重复。
  3. main中调用add.Add(1,2)时,add是包, 必须跟add.go中的package处的包名一致,否则报错。
  4. import后, 怎么去查找对应的包呢?思考一下, 很简单,无非就是GOROOT和GOPATH. 也应该明白了, src这个目录名可不是能随便取的。
引用第三方项目

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

代码很简单

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关注我的博客,我们后续再见。

PS: 手机看的不方便?点击阅读原文去我博客里看

本文分享自微信公众号 - 编程三分钟(coding3min),作者:机智的小熊

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 进程管理-Linux每日一练(6)

    平时学的是这五种状态新建、就绪、运行、阻塞、终止,但是在Linux里面可以查看到的要更加详细,如下命令的 STAT 列就是展示了状态

    机智的程序员小熊
  • 三分钟学 Go 语言——range深度解析

    小熊最近两天加班比较严重,要处理的事情很多,但是学习的热情永远不会减少,前面讲述的go语言语法是非常非常简单的,所以没有做深入的剖析,后面会从各种角度解析语法,...

    机智的程序员小熊
  • 进程启动时间监控(linux篇)

    直接读取/proc/{pid} 文件夹的时间戳方式(不准确但效率高),以下是方法一的代码,但是我没有验证过

    机智的程序员小熊
  • Go语言学习之 - 简单的并发程序

    简单、
  • Go安装以及目录结构和环境变量

    下载地址 https://studygolang.com/dl 选择自己对应的操作系统

    阿伟
  • Go 函数调用 ━ 栈和寄存器视角

      函数的调用过程主要要点在于借助寄存器和内存帧栈传递参数和返回值。虽然同为编译型语言,Go 相较 C 对寄存器和栈的使用有一些差别,同时,Go 语言自带协程并...

    mojocn
  • 小程序开发者工具下载及调试指南

      昨天晚些时候微信团队发布了微信小程序开发者工具、微信小程序开发文档和微信小程序设计指南,全新的开发者工具,集成了开发调试、代码编辑及程序发布等功能,帮助开发...

    ytkah
  • ECMAScript6 数组去重

    数组去重这个问题无论是在面试当中,还是实际项目中,出现的频率都挺多的,而我们以往的解决方式,就是通过新建一个空的数组,通过 indexOf 方法进行新数组和原数...

    Nian糕
  • 知识图谱之社交网络分析(SNA)之python处理

    将G = nx.Graph() 改为 G = nx.DiGraph()即进行有向图,表示不同的边

    学到老

扫码关注云+社区

领取腾讯云代金券