ubuntu18.04 安装go语言开发环境

一、安装golang

首先查看系统上有没有go的版本
在这里插入图片描述
若没有go的版本,通过系统包安装
在这里插入图片描述
检查是否安装成功
在这里插入图片描述

(vscode后面会用到,同样可以通过系统库安装 sudo apt-get install code,这里不再赘述)

二、创建工作目录

在home目录下新建一个目录gopath(名字可以任意),在该目录下新建三个子目录:

  • src – 里面每一个子目录,就是一个包。包内是Go的源码文件

  • pkg – 编译后生成的包的目标文件

  • bin – 生成的可执行文件。

在这里插入图片描述

三、设置环境变量

编辑home目录下的.bashrc文件,在末尾添加以下内容:
(home/xumy/是我的home目录)
在这里插入图片描述
运行 source ~/.bashrc,使得以上的配置生效。

运行go env,检查以上配置是否生效。
在这里插入图片描述

四、编写第一个go语言程序hello.go

(参考https://go-zh.org/doc/code.html

源文件应该放在工作目录的src文件夹下,在这下面可以创建自己的包路径,这里以github.com/github-user/hello为例,这相当于c++中的项目文件,所有与项目有关的代码都可以放在这里。

创建包路径:

mkdir $GOPATH/src/github.com/github-user/hello -p

在该目录下创建一个名字为hello.go的文件,文件内容如下:

package main
import "fmt"

func main() {
    
    
	fmt.Printf("hello, world\n")
}

五、安装一些go的工具

在vscode中打开.go文件,它会提示你要安装一些扩展,但是点击安装后会失败,失败原因是golang.org这个网站被墙了,导致我们拉取golang.org/x/tools目录下的内容失败。
在这里插入图片描述
手动安装
(参照https://github.com/northbright/Notes/blob/master/Golang/china/get-golang-packages-on-golang-org-in-china.md

首先在$GOPATH目录下创建子目录:

mkdir -p $GOPATH/src/golang.org/x/

参数-p的作用是当路径中的目录不存在时创建一个。

接着下载github镜像的tools目录的源码

go get -d github.com/golang/tools

然后将tools移动到第一步创建的目录下

cp $GOPATH/src/github.com/golang/tools $GOPATH/src/golang.org/x/ -rf

最后,安装工具包

go install golang.org/x/tools/go/buildutil

最最后,关闭vscode后重新打开,按照提示安装,会看到这样的结果:
在这里插入图片描述
大功告成,ready to go!

六、运行第一个程序

执行 go install github.com/github-user/hello

此命令会构建 hello 命令,产生一个可执行的二进制文件。 接着它会将该二进制文件作为 hello(在 Windows 下则为 hello.exe)安装到工作空间的 bin 目录中。 在我们的例子中为 $GOPATH/bin/hello,具体一点就是 $HOME/go/bin/hello。

注意一点,这条命令可以在任何路径下执行,go 工具会根据 GOPATH 指定的工作空间,在 github.com/user/hello 包内查找源码。

现在,我们可以在命令行下输入它的完整路径来运行它了:
$GOPATH/bin/hello
如果已经将 $GOPATH/bin 添加到 PATH 中了,只需输入该二进制文件名即可:
hello

在这里插入图片描述

到这里go的安装过程就结束了,以下内容是一些扩展。

七、安装与运行tour

(详情戳https://github.com/Go-zh/tour
由于github下载太慢所以只能安装tour目录下的gotour,运行结果如下:
在这里插入图片描述

八、我的第一个库与测试

(详情戳https://go-zh.org/doc/code.html

  • 目标

我们要编写一个库,并让hello.go使用这个库中定义的方法。

  • 库目录的创建与库内容编写

与编写一个程序类似,第一步要先给这个库创建一个包路径。
mkdir $GOPATH/src/github.com/github-user/stringutil

在此目录下新建一个文件reverse.go,文件内容如下:

// stringutil 包含有用于处理字符串的工具函数
package stringutil

//Reverse 将其实参字符串左右反转
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)
}

用 go build 命令来测试该包的编译:

go build github.com/user/stringutil

确认 stringutil 包构建完毕后,修改原来的 hello.go 文件(它位于 $GOPATH/src/github.com/github-user/hello)去使用它:

package main
import  (
	"fmt"
	"github.com/github-user/stringutil"
)

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

最后,重新安装hello程序之后就可以运行了(go会自动安装所有hello程序依赖的东西,包括stringutil)
在这里插入图片描述

  • 测试

go有一个轻量级的测试框架,你可以通过创建一个名字以 _test.go 结尾的,包含名为 TestXXX 且签名为 func (t *testing.T) 函数的文件来编写测试。 测试框架会运行每一个这样的函数;若该函数调用了像 t.Error 或 t.Fail 这样表示失败的函数,此测试即表示失败。

我们可通过创建文件 $GOPATH/src/github.com/github-user/stringutil/reverse_test.go 来为 stringutil 添加测试,其内容如下:

package stringutil

import "testing"

func TestReverse(t *testing.T) {
    
    
	cases := []struct {
    
    
		in, want string
	} {
    
    
		{
    
    "Hello, world", "dlrow ,olleH"},
		{
    
    "Hello, 世界", "界世 ,olleH"},
		{
    
    "", ""},
	}

	for _,c:= range cases {
    
    
		got := Reverse(c.in)
		if got != c.want {
    
    
			t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want)
		}
	}
}

使用go test github.com/github-user/stringutil命令来运行该测试
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43867940/article/details/108558661
今日推荐