Go学习笔记Part 1 — MacOS开发环境设置与介绍(使用Virtual Studio Code)

本篇所介绍的设置会与操作系统或IDE版本不同而有所差异, 这里仅提供观念与方向之参考.

安装Golang编译器

这个文件会将Go安装在/usr/local/go这个路径

设置$GOROOT与$GOPATH系统变量

两个变量指的路径很重要, 在后面Virtual Studio Code(简称vsc)会用到, 尤其是$GOPATH关系到你的程序会怎么放

(在后来版本的vs code{修改此段时用的为1.58.x 于2021.7 MacOS}默认了自己一组GOPATH)

, 如果碰到程序跑不起来很多时候是程序放到不对的位置, 所以先认识$GOPATH是重要的一步.

在Mac OS可以在你的帐号目录下(/Users/your_login_name)编辑“.bash_profile”或“.bashrc”, 例如:

$ nano ~/.bash_profile

在文件前添加到 –

GOROOT = “/usr/local/go”

GOPATH = “/Users/your_login_name/自己取名的目录”

而$PATH改成 —

PATH = “$PATH:$GOROOT/bin”

没有$PATH就自己加, 按control+o存档, control+x离开. 这时候已把/usr/local/go/bin加到你的环境变量, 可以方便使用go指令, 在任何地方你都可以打go的指令, 如果要看 go的环境设置可以打:

$ go env

其实在上个步骤之前你也可以用这个指令查看go原本的设置, 自己设置GOPATH才能够把go程序放在想要的地方.

其他Linux或Windows安装可看这里.

如果上面命令能执行, 那代表你的go已经安装完成, 你可以进一步测试能不能跑程序 — 在刚刚配置的$GOPATH路径下(例如 /Users/abc/myworkspace)建立src目录:

$ mkdir /Users/abc/myworkspace/src

创建你的工程名称, 例如myproject :

$ mkdir /Users/abc/myworkspace/src/myproject

创建go程序 :

$ cd ~/myworkspace/src/myproject

$ nano hello.go

hello.go内容如下:

package main

import “fmt”

func main() {
fmt. Printf(“hello, worldn”)
}

control+o存档, control+x离开.

编译与执行/Users/abc/myworkspace/src/myproject/hello.go :

$ cd /Users/abc/myworkspace/src/myproject
$ go build

2021.9编修: 在新版go (测试v1.17) 执行上述指令后会产生一个以Project Name为名的执行文件, 所以执行

$ ./myproject

如果看到 hello, world 表示成功. 以上都通过就是你已经完成安装并能跑go程序, 就可继续进行下一步安装VSC.

安装IDE — Virtual Studio Code

如果想使用更多开发整合工具(debug, auto completation, 程序管理等…), 当然就需要IDE来协助, Golang官方提了几个建议的IDEs (至2021.7为止):

vim — vim的go plug-in套件.

GoLand — 由JetBrians开发, Intellij为基底, 若是Android开发者应该很熟悉他的接口, 只是它要付费, 后来我没选择它.

Visual Studio Code — Visual Studio的Open Source版, . NET的开发者对他应该不陌生, 由M$支持, 而且上面有相当多程式语言的plug-in, 算是微软版的Eclipse, 因为这几个因素加上可以熟悉一下. NET开发工具, 对Go开发的支持度也算完整, 所以我选用这款IDE.

以下是针对 VSC 的快速安装配置帮助.

下载 VSC

我下载Mac版, 是一个zip文件, 下载完后直接解压缩就是VSC了, 把它放到你要的地方, 我放到“应用程序”, 然后执行.

安装Go plug-in. (官方介绍页)

在VSC最左侧的最后一个icon点选后就会开“扩充功能”,找Go,开发团队已改为Go Team at 谷歌. (2021.7), 下图是旧的.

Go学习笔记Part 1 — MacOS开发环境设置与介绍(使用Virtual Studio Code)
Go Plug-in for VCS

(到了2021.7为止, Go Meta Linter, Debugger — Delve已经不需要再另外安装 )

在Go plug-in介绍中针对几项功能做了说明:

(这部分会先简单介绍Go plug-in, 还需要安装相依套件会在下半段叙述.)

Go Language Server — 这个是Go plug-in试验性质的功能, 提供跟语系相关的功能, 例如: 定义说明, 说明标签, 签署文件等… 具体用途不太清楚, 所以略过不讲, 想知道可以开官方介绍页里这个部分的说明.

Linter — 这个功能是帮你检查程序里的语法有没有错误, 在编译代码时就会发挥作用, 如果有错或有问题就会先提示你哪边有问题及错误. Go plug-in有基本的Linter功能(仅提供程序写法的检查, 无查错功能), 但文件中建议你另外再安装Go Meta Linter, 这个才有查错功能(程序写错; 未使用的全局变量与常数; 未使用的程序).

Commands — VSC支持直接下指令(这部分不需额外再安装套件), 就像你在Windows(DOS窗口)/Mac,Linux(terminal窗口)打指令一样, 在Mac按command+shift+p就可以开指令窗口, 可以下哪些指令与分别的作用说明请参考官方介绍页中这部分的说明.

Go Debugger — Golang在除错工具上使用另一套叫delve的外挂, 除了一般除错外也支持远程除错.

这里

VSC Debugger — VSC Debugger与Go Debugger是不一样的工具, VSC Debugger提供除错窗口(debug viewlet), 中断点等功能, 两者是搭配使用的.

Microsoft/vscode-go

An extension for VS Code which provides support for the Go language. – Microsoft/vscode-go

github.com

接下来安装所有Go plug-in的依赖包, 前面提到VSC提供command功能, 我们利用此功能进行安装:

(2021.7增修)先到VS Code的Preference > Settings下找GOPATH设置(在Search Settings搜寻此关键字比较快),在搜索结果中找到Go:Gopath这项有个Edit in setting.json,他就会新增一个“go.gopath”:“……”的设置,把你OS设置的GOPATH路径填到这里, 保存文件。

command+shift+p打开command窗口.

(2021.7增修)确定一下VS Code的GOPATH —

执行 >GO : Current GOPATH

右下就会跳出窗口告诉你目前 VS Code所用的GOPATH.

继续

执行 >GO : Install/Update Go Tools.

就会安装所有依赖软件包了.

Go学习笔记Part 1 — MacOS开发环境设置与介绍(使用Virtual Studio Code)
Go Tools

关于相关套件的帮助, 提供哪些功能可以看这里.

安装完成会在VSC看到类似以下信息

Go学习笔记Part 1 — MacOS开发环境设置与介绍(使用Virtual Studio Code)
Go Tools installed.

我们再确认一下, 顺便看它们安装在何处, 记得前面设置的$GOPATH吗? 这里的例子是 /Users/abc/myworkspace , 切到这个目录:

$ cd /Users/abc/myworkspace/

Mac OS 也可以打:

$ cd $GOPATH

然后再看一下此目录下的内容:

$ ls

bin pkg src

除了先前我们建立的 src 外还多了 bin 和 pkg 两个目录, 再进到 bin 看:

$ cd bin

$ ls

fillstruct gocode golint goplay gotests mypractice

go-outline godef gomodifytags gorename guru

go-symbols godoc gopkgs goreturns impl

就能看到刚刚安装的Go plug-in相依套件放在此处, 印象中如果你没在系统变量设置$GOPATH, 也没在VSC的Go plug-in的配置文件指定GOPATH位置, 安装就会出现错误. 之后你的项目与程序位置也跟$GOPATH有关系.

你需要在VSC开启你的workspace文件夹, 也就是先前建立的$GOPATH(/Users/abc/myworkspace), 指到src打开后就会看到src下所有的文件夹, 前面建的是/Users/abc/myworkspace/src/myproject, 然后点开主程序.go文件.

Go学习笔记Part 1 — MacOS开发环境设置与介绍(使用Virtual Studio Code)
To open project folder

切到debug窗口(debug viewlet), 然后开左上方的齿轮钮, 应该就会开launch.json档, 可以开始设置debugger.

Go学习笔记Part 1 — MacOS开发环境设置与介绍(使用Virtual Studio Code)

其中三个参数: remotePath, host and port 跟远程调错相关, 在这边忽略不谈.

参数 program 是必要的: 可以设置工作文件夹下的package或单一文件, 要注意的是文件夹路径只接受绝对路径.

调试单一文件这里的例子是:

“/Users/abc/myworkspace/src/myproject/hello.go”

如果是整个项目则是:

“/Users/abc/myworkspace/src/myproject/”

参数 mode 有3个设置 :

“debug” : 编译和运行调试 program 所配置的文件或目录下的go程序. (默认)

“test” : 执行program下的test程序, 详细用法请参考出处的文档帮助.

“exec” : 执行已编译好的程序, 路径会根据 program 的设置, 此时需要将路径指到放已编译的文件目录, 例如:“/Users/abc/myworkspace/bin”

参数 showLog 是将log显示在底下的窗口.

更多关于远程侦测(remote debugging), 问题排除等请参考原文件.

在新的Debugger设置(2021.7, VS Code 1.58.x, Golang 1.16)已改变,加入了module的概念,如果是指定执行Project中的文件夹为执行位置,必须要将该文件夹建立成module(会产生 go.md 文件),Debugger才会运作。

例如你要将整个 Project 设为执行位置 —

“/Users/abc/myworkspace/src/myproject”

在Terminal,在/Users/abc/myworkspace/src执行

$ go mod init myproject

成功的话应该会多一个go.mod档,然后再回到前面VS Code的launch.json将“/Users/abc/myworkspace/src/myproject”(也可以写成${workspaceFolder}/src/myproject)设置到’program’栏位。

Workspace简介

在開始寫code之前先認識一下Go的项目是怎麼放的.

在前面环境安装章节里提到$GOPATH这个路径就是workspace了.

workspace其实可以设置很多个(也就是$GOPATH可以设置多个路径), 至于怎么设置管理要再查, 这里先不提, 仅讨论单一workspace, 因为实务上开发者也都只会用到一个workspace.

这个workspace会把所有用到的东西都放在此处, 所以如果完成开发环境设置任务的话(没有请回转到前面), 到$GOPATH看:

$cd $GOPATH

$ls

bin pkg src

这就是go workspace的基本组成.

src: 所有.go的源代码都放在此处.

bin: 自己或其他函数库的可执行文件都放在这里.

pkg: 上述两个都好理解, pkg简单说是放src中.go档编译出来的.a文件, 而这个.a是包含src相对应的package下所有的.go程序, 看一下官方提供的例子:

bin/
hello # command executable
outyet # command executable
pkg/
linux_amd64/
github.com/golang/example/
stringutil.a # package object
src/
github.com/golang/example/
.git/ # Git repository metadata
hello/
hello.go # command source
outyet/
main.go # command source
main_test.go # test source
stringutil/
reverse.go # package source
reverse_test.go # test source
golang.org/x/image/
.git/ # Git repository metadata
bmp/
reader.go # package source
writer.go # package source
… (many more repositories and packages omitted) …

src目录

有两个主程序(有func main() 在的) — hello/hello.go, outyet/main.go; 一个函数(程序, 没有func main()的) — stringutil/reverse.go, 当执行:

$go build $GOPATH/src/github.com/golang/example/stringutil

$cd $GOPATH/src/github.com/golang/example/hello

$go install

go build是编译指令; go install是编译+产生可执行文件, 必须要指定在package main才可以跑.

特别注意, 当执行go build时, 并不会在bin和pkg产生任何文件, 而是要执行go install.

pkg目录

执行go install后看一下范例中的pkg目录:

github.com/golang/example/stringutil.a, 注意.a不是叫reverse.a而是stringutil.a, 所以.a是stringutil这包package所有.go的编译档.

bin目录

同样的, 如果install outyet/main.go:

$cd $GOPATH/src/github.com/golang/example/outyet

$go install

我们在pkg文件没看到hello.a和outyet.a, 反而是在bin目录下看到hello与outyet两个可执行文件, outyet也不是以主程序main为名, 而是outyet这个package. 由此可知:

  1. 主程式并不会包进pkg中.
  2. bin也是以目录(或package)为名的一整包执行程序.

程序进入点和套件引用

这里还要特别提的是, 注意看范例中的主程序(hello.go)与函式文件(reverse.go):

github.com/golang/example/hello/hello.go —

package main

import “fmt”

func main() {
fmt. Printf(“Hello, world.n”)
}

github.com/golang/example/stringutil/reverse.go —

package stringutil

func Reverse(s string) string {
r := []rune(s)
for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
r[i], r[j] = r[j], r[i]
}
return string(r)
}

package main就是程序进入点的套件, package stringutil则为library范例, 若要引用library就像这样:

package main

import (
“fmt”

“github.com/user/stringutil”
)

func main() {
fmt. Printf(stringutil. Reverse(“!oG ,olleH”))
}

建议写完整的package路径.

另外还有一个要注意的点是library程序或副程序的func名称第一个字母必须为大写, 才会被go视为function, 否则会看到:

cannot refer to unexported name xxxx

如果有注意到官方的范例里有两个 .git/ 目录, 显示workspace里也是放所有repositories的地方. 所以认识workspace也是开发go的主线任务之一, 这里只是简单介绍, 官方文件还有介绍怎么引用library, 怎么test。

(0)
麦克哥麦克哥

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注