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

Wesley13
• 阅读 653

一、安装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语言开发环境

三、设置环境变量

编辑home目录下的.bashrc文件,在末尾添加以下内容:
(home/xumy/是我的home目录)
ubuntu18.04 安装go语言开发环境
运行 source ~/.bashrc,使得以上的配置生效。

运行go env,检查以上配置是否生效。
ubuntu18.04 安装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目录下的内容失败。
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/hello
如果已经将 $GOPATH/bin 添加到 PATH 中了,只需输入该二进制文件名即可:
hello

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

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

七、安装与运行tour

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

八、我的第一个库与测试

(详情戳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)
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命令来运行该测试
ubuntu18.04 安装go语言开发环境

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java爬虫之JSoup使用教程
title:Java爬虫之JSoup使用教程date:201812248:00:000800update:201812248:00:000800author:mecover:https://imgblog.csdnimg.cn/20181224144920712(https://www.oschin
Wesley13 Wesley13
2年前
MySQL8开启ssl加密
1概述MySQL从5.7开始默认开启SSL加密功能,进入MySQL控制台后输入status可以查看ssl的状态,出现下图表示在使用ssl:!在这里插入图片描述(https://imgblog.csdnimg.cn/20200325131703934.png)另外,ssl加密需要密钥与证书,可以使用openssl手动生成或使用my
Stella981 Stella981
2年前
Dataway header传参
import'net.hasor.dataql.fx.web.WebUdfSource'aswebData;returnwebData.getHeader("name");!在这里插入图片描述(https://imgblog.csdnimg.cn/20200506120538153.png?xossproce
Stella981 Stella981
2年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Wesley13 Wesley13
2年前
mysql查询每个学生的各科成绩,以及总分和平均分
今天看一个mysql教程,看到一个例子,感觉里面的解决方案不是很合理。问题如下:有学生表:!在这里插入图片描述(https://oscimg.oschina.net/oscnet/07b001b0c6cb7e0038a9299e768fc00a0d3.png)成绩表:!在这里插入图片描述(https://oscimg.o
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这