hw1-Go语言环境配置

使用

ubuntu 16.04
Golang

在Ubuntu下安装golang

用命令行下载golang

需要注意的是,不同版本的Linux下载Golang所用的命令不同
在ubuntu中,我们使用

$ sudo apt-get install golang

但在下载时出现错误,以错误信息提示推测应该是版本过低,再经系统提示使用如下命令

$ sudo apt golang-go

下载完成

查看下载版本

使用

go version

得到如下结果

查看安装路径

在ubuntu下使用命令

dpkg -L golang

安装路径

设置环境变量

创建工作空间

在/home目录下, 建立一个名为gopath(名字任意)的目录,在该目录中建立三个子目录(名字必须为src、pkg和bin)

mkdir ~/gopath
cd ~/gopath
mkdir src
mkdir bin
mkdir pkg

配置环境变量

打开配置文件

gedit ~/.bashrc

修改配置文件,指定工作空间

将如下语句添加到配置文件末尾

export GOPATH=/home/gopath

保存配置文件,使添加的命令生效

 source ~/.bashrc

得到截图结果

在这里插入图片描述

创建第一个程序“Hello,world!”

创建源代码目录

使用命令

mkdir /home/gopath/src/github.com/github-user/hello -p

使用VS code创建文件hello.go

package main

import "fmt"

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

运行该文件

得到结果
运行结果

安装必要的工具和插件

安装 Git 客户端

sudo apt install git

安装 go 的一些工具

将源代码下载到本地


mkdir $gopath/src/golang.org/x/

go get -d github.com/golang/tools

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

安装工具包

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

退出 vscode,再进入,按提示安装

安装运行 hello world

$ go install github.com/github-user/hello
$ hello

安装与运行 go tour

$ go get github.com/Go-zh/tour/gotour
$ gotour

我的第一个包与测试

参照Go语言官方文档

我的第一个库

让我们编写一个库,并让 hello 程序来使用它。

同样,第一步还是选择包路径(我们将使用 github.com/github-user/stringutil)
并创建包目录:

$ 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

当然,若你在该包的源码目录中,只需执行:

$ go build

即可。这不会产生输出文件。想要输出的话,必须使用 go install命令,它会将包的对象放到工作空间的 pkg 目录中。

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

package main

import (
	"fmt"

	"github.com/user/stringutil"
)

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

无论是安装包还是二进制文件,go 工具都会安装它所依赖的任何东西。
因此当我们通过

$ go install github.com/user/hello

来安装 hello 程序时,stringutil 包也会被自动安装。

运行此程序的新版本,你应该能看到一条新的,反向的信息:

$ hello
Hello, Go!

做完上面这些步骤后,你的工作空间应该是这样的:

bin/
	hello                 # 可执行命令
pkg/
	linux_amd64/          # 这里会反映出你的操作系统和架构
		github.com/user/
			stringutil.a  # 包对象
src/
	github.com/user/
		hello/
			hello.go      # 命令源码
		stringutil/
			reverse.go       # 包源码

注意 go install 会将 stringutil.a 对象放到pkg/linux_amd64 目录中,它会反映出其源码目录。
这就是在此之后调用 go 工具,能找到包对象并避免不必要的重新编译的原因。
linux_amd64 这部分能帮助跨平台编译,并反映出你的操作系统和架构。

Go的可执行命令是静态链接的;在运行Go程序时,包对象无需存在。

包名

Go源文件中的第一个语句必须是

package 名称

这里的 名称 即为导入该包时使用的默认名称。(一个包中的所有文件都必须使用相同的 名称。)

Go的约定是包名为导入路径的最后一个元素:作为 “crypto/rot13”导入的包应命名为 rot13。

可执行命令必须使用package main

链接成单个二进制文件的所有包,其包名无需是唯一的,只有导入路径(它们的完整文件名才是唯一的。

更多关于Go的命名约定见实效Go教程

测试

Go拥有一个轻量级的测试框架,它由 go test 命令和 testing
包构成。

你可以通过创建一个名字以 _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 运行该测试:


$ go test github.com/user/stringutil
ok  	github.com/user/stringutil 0.165s

同样,若你在包目录下运行 go 工具,也可以忽略包路径

$ go test
ok  	github.com/user/stringutil 0.165s

测试结果如图示
测试结果
该包运行正常

实验小结

1.首次接触Go语言遇到的问题较多,由于使用的linux版本与老师给出的教程不同,所以在配置方面使用的命令也有许多不同
2.在下载工具时遇到的最多的问题是文件夹权限(promission denied)的问题,经过查阅相关资料发现可以用

chmod -R 777 (文件夹路径)

来解决
3.在配置过程中遇到了虚拟机卡顿,以致部分配置过程没有留下截图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值