mac下golang的环境配置以及使用goland创建项目

581 阅读2分钟

前言

在配置golang环境时,一直被GOPATH困惑。为什么一定要在GOPATH目录下创建bin、pkg、src三个文件夹,为什么所有项目源码都要放在src目录下的,实在是令人费解。在查阅了不少资料后,终于弄明白了GOPATH以及golang的包管理机制

mac下安装golang以及环境配置

使用homebrew一键安装

brew install go

查看安装是否成功

go env

如果成功安装,会显示以下信息

image.png

重要配置参数的说明

  • GO111MODULE:是否启用go module
  • GOPATH:golang的工作目录,在mac下默认是用户目录/go
  • GOROOT:golang的安装目录

配置GOPATH

cd ~
mkdir go
cd go
mkdir bin
mkdir pkg
mkdir src

GOPATH与go module

在使用goland创建项目时的两种创建方式

1.默认方式(使用go module)

image.png

2.使用GOPATH

image.png

从创建位置可以看到二者的一点差别,使用GOPATH创建项目时,项目会默认放在$GOPATH/src目录下

goland官方文档的说明

默认情况下,GoLand 建议创建一个 Go module项目。使用 Go module,您无需将项目文件保存在 GOPATH 下,并且可以轻松管理。如果您不需要复杂的依赖管理并准备将所有项目文件存储在 GOPATH 下,您可以创建GOPATH类型的项目

为什么会两种创建方式呢,所谓go module和GOPATH都是go语言的依赖管理方式,在go1.11之前,只有GOPATH一种依赖管理工具,为了解决GOPATH的一些严重缺陷,golang推出了go module,从go1.16开始,go module默认开启

GOPATH的缺陷

使用GOPATH时,必须要在$GOPATH目录下建立三个文件夹

bin //存放go的可执行文件
pkg //存放编译后的包文件
src //存放所有go项目的源码文件

使用这种方式会存在一些问题

  • 所有项目源码都必须放在$GOPATH/src,缺少灵活性
  • 第三方依赖包会通过git clone下载到$GOPATH/src目录下,造成src目录变得很复杂
  • 无法进行依赖版本管理(根本无法想象一门现代编程语言会设计的如此简陋)

(其实也可以为不同的项目设置不同的GOPATH,但这样会导致下载重复的依赖,浪费磁盘空间)

为了解决这些问题,go module出现了

go module介绍

go module是golang的新型依赖管理工具,原理类似于java的maven,使用go module创建项目时,项目目录会生成一个mod.go文件,用来管理依赖包以及进行版本控制,类似于这样

image.png

在go.mod文件中添加依赖后,golang会将下载依赖到$GOPATH/pkg下,这个目录就是我们的本地仓库,里面下载的依赖可以供所有项目使用,这就是之前配置GOPATH目录的原因。明白了go module与GOPATH的区别就可以创建项目了

使用goland创建项目

创建一个go module项目

image.png 项目目录下会自动生成一个go.mod文件

新建一个main.go文件,内容如下

package main

import "fmt"

func main() {
   fmt.Println("Hello go!")
}

这里需要注意,包名一定要是main,因为在golang中,只有main包下的文件才会编译成可执行文件

配置run confugration,选择go build

image.png

配置好之后就可以运行了,结果如下

image.png

总结

目前推荐的做法是使用go module,但很多网上教程还是在使用GOPATH,这无疑会使初学者感到困惑。