一、安装golang

首先查看系统上有没有go的版本
ubuntu18.04 安装go语言开发环境
若没有go的版本,通过系统包安装
ubuntu18.04 安装go语言开发环境
检查是否安装成功
ubuntu18.04 安装go语言开发环境

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

二、创建工作目录

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

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

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

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

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

三、设置环境变量

source ~/.bashrc
go env

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

源文件应该放在工作目录的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目录下的内容失败。
ubuntu18.04 安装go语言开发环境
手动安装
(参照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后重新打开,按照提示安装,会看到这样的结果:
ubuntu18.04 安装go语言开发环境
大功告成,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/hellohello

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

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

七、安装与运行tour

(详情戳https://github.com/Go-zh/tour)
由于github下载太慢所以只能安装tour目录下的gotour,运行结果如下:
ubuntu18.04 安装go语言开发环境

八、我的第一个库与测试

  • 目标

我们要编写一个库,并让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)
ubuntu18.04 安装go语言开发环境

  • 测试

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