服务计算 [2]
上周的作业中我们搭建了自己的私有云平台,这周我们将会在我们安装后的CentOS7系统上配置相应的go语言开发的环境,以为后续的课程做好准备。
文章目录
一、安装VSCode编辑器
如果你曾经是 Notepad++ 或 Sublime text 或 Atom 的用户,你不得不考虑改用微软 VSCode 做轻量级的编程。 它采用 JavaScript 技术,兼容几乎所有流行的操作系统,特别是对中文支持堪称完美!它不仅是跨平台多语言软件开发工具,而且是 Linux 平台写 Github Flavored Markdown的神器.
查阅老师给的教程,我们不难发现安装VSCode的方法,打开Terminal,输入以下指令:
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
yum check-update
sudo yum install code
安装完成后,我们再接着在terminal输入 code
,就可以直接打开VSCode编辑器了……当然,如果你是开启了root权限的话,记得先输入exit
,回到本地用户再操作…… CentOS7版本的VSCode长下面这个亚子。
二、安装 golang
1.安装
安装的方式比较简单,老师的教程里面已经给出来了,在terminal中输入以下指令:
sudo yum install golang
但是我们会发现,貌似不太行啊……他会提示 No package golang aviable
解决办法是:先安装epel
就可。 在terminal中先输入以下指令:
yum install epel-release
然后就可以正常安装啦。我们来检查安装在哪个文件夹,输入以下指令:
rpm -ql golang |more
然后我们直接利用 - version
来验证是否安装成功。
至此,golang的安装结束。
2.设置环境变量
-
我们先在主目录下创建一个
gowork
的文件夹。mkdir $HOME/gowork
-
然后我们开始配置它的环境,因为我们是基于Centos7进行配置的,所以我们直接在
~/.profile
中进行添加就可。export GOPATH=$HOME/gowork export PATH=$PATH:$GOPATH/bin
添加后,我们执行一下这些改变,指令也非常简单:
source $HOME/.profile
-
最后我们检查一下是否安装成功,执行一下
env
就可。go env
可以看见配置成功。
3.创建 hello world!
-
我们首先创建一个目录来存储我们的源代码。 - 记得要加
-p
很玄学的事情,目录创建不了,先加个-p
试试,再不行就直接su
换权限。mkdir $GOPATH/src/github.com/github-user/hello -p
-
进入这个文件夹,我们新建一个go文件,来开始我们的人生第一个go语言项目。
cd $GOPATH/src/github.com/github-user/hello code hello.go
记得如果你的当前用户是root用户的话,则你用
code
指令打开VSCode指令的时候,必须要按exit
回到本地用户,这样才可以用,否则的话会提醒你是不适合的·。 -
直接在打开的VSCode里面填写以下代码。
package main import "fmt" func main() { fmt.Printf("hello, world\n") }
-
go run
执行这个文件,看看似不似我们的helloworld。go run hello.go
三、安装必要的工具和插件
1.安装 Git 客户端
之前配置环境的时候,我们就已经在windows端配置过 git
,这次我们在CentOS7上面安装客户端。直接在terminal中输入以下指令:
sudo yum install git
很方便的,这个没有坑,但是这种方法安装的git
版本比较低,如果想要替换成更高版本的,请自行参考一下百度,这里就不多说了。
2.安装 go 的一些工具
我们进入VSCode的时候,会发现不断的会有提示,让我们安装相关的tool,但是你直接点击install
会发现……golang的官网被墙了,所以直接 failed
,下面我们采取将相关文件下载到本地进行安装的方法。
-
我们先将源代码下载到本地。
//firsr 老规矩,我们先创建一个文件夹。 mkdir $GOPATH/src/golang.org/x/ //Second 我们下载源码 go get -d github.com/golang/tools //Third 我们将下载的源代码copy进文件夹 cp $GOPATH/src/github.com/golang/tools $GOPATH/src/golang.org/x/ -rf
-
然后我们运行这个源代码,然后直接安装这个工具包。
go install golang.org/x/tools/go/buildutil
-
然后我们退出VScode,直接进行安装即可。
3.安装运行 hello world
话不多说,直接上指令。
go install github.com/github-user/hello
hello
本来还有个安装与运行go tour
的,但是看了看有在线版的网站教程,在这里就不多说了。详情见:
四、如何使用Go编程
Go代码必须放在工作空间内。它其实就是一个目录,其中包含三个子目录:
src
目录包含Go的源文件,它们被组织成包(每个目录都对应一个包),pkg
目录包含包对象,bin
目录包含可执行命令。
go
工具用于构建源码包,并将其生成的二进制文件安装到pkg
和bin
目录中。
src
子目录通常包会含多种版本控制的代码仓库(例如Git或Mercurial), 以此来跟踪一个或多个源码包的开发。
1.环境变量的配置
和我们上面的一样,我们需要重新建一个新的文件夹来搭建我们的工作空间,就用work吧。下面开始在terminal里面输入指令开始我们的征程。
mkdir $HOME/work
export GOPATH=$HOME/work
然后为了使用方便,我们需要将工作空间的bin子目录添加进我们的PATH中:
export PATH=$PATH:$GOPATH/bin
下面我们开始要建立包路径。
2.包路径
为了我们的包未来不会被添加到标准库,导致和其他扩展库中的包冲突,我们必须得给我们的包设立一个路径。GoDoc上面给了详细的教程,我们就按照它的命名来吧。
mkdir -p $GOPATH/src/github.com/user
3.开始我们的第一个程序
-
我们先在包路径中建立一个新的文件夹,取名为
hello
,作为我们的包目录。 指令如下,惯常makir
:mkdir $GOPATH/src/github.com/user/hello
-
然后我们在这个文件夹下建立hello.go 文件。
cd $GOPATH/src/github.com/user/hello code hello.go
hello.go
的代码和之前的是一样的,这里不再赘述。 -
做完这一切后,我们就可以用 go工具构建并安装我们的程序了。然后我们直接通过它的完整路径在terminal里面运行它。
go install github.com/user/hello $GOPATH/bin/hello
如我们所想的那样,出现hello,world,一切顺利。
4.构建第一个库
在这个小节中,我们要自己做一个库,并且用我们写的hello程序去调用它。
-
和我们写第一个程序一样,代表某些东西开始的肯定就是宏观的新建,所以我们要建一个文件夹作为包目录,就用
stringutil
.mkdir $GOPATH/src/github.com/user/stringutil
-
然后,我们进入这个目录,开始编写一个名为reverse.go的反转程序。
cd $GOPATH/src/github.com/user/stringutil code reverse.go
在打开的VSCode中填写以下内容:
// 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 install
指令,他会将包的对象放到工作空间的pkg文件中go build github.com/user/stringutil
-
因为我们需要让
hello.go
程序去引用这个包,所以我们现在要对hello.go
文件做出更改。package main import ( "fmt" "github.com/user/stringutil" ) func main() { fmt.Printf(stringutil.Reverse("!oG ,olleH")) }
-
然后我们开始安装
hello.go
程序,无论是安装包还是二进制文件,go
工具都会安装它所依赖的任何东西。 因此当我们安装hello
程序的时候,stringutil
包也会被安装。 指令如下:go install github.com/user/hello
我们接下来将其编译:
hello
得到结果"Hello,Go!"。
5.测试
Go拥有一个轻量级的测试框架,它由
go test
命令和testing
包构成。你可以通过创建一个名字以
_test.go
结尾的,包含名为TestXXX
且签名为func (t *testing.T)
函数的文件来编写测试。 测试框架会运行每一个这样的函数;若该函数调用了像t.Error
或t.Fail
这样表示失败的函数,此测试即表示失败
-
在我们放置reverse的文件夹下新建一个文件,
reverse_test.go
,内容如下: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) } } }
-
在teminal用
go test
指令进行测试好吧:go test github.com/user/stringutil
检测是成功的。
6.远程包
go get github.com/golang/example/hello
$GOPATH/bin/hello
如果成功的话,会显示以下Hello, Go examples!
.
五、项目地址
按照老师的要求,本次作业创建的work文件夹我们会上传至 Github
,项目地址为:
本次产生文件树的结构图如下:
.
├── bin
│ └── hello
├── pkg
│ └── linux_amd64
│ └── github.com
│ └── user
│ └── stringutil.a
└── src
└── github.com
├── golang
│ └── example
│ ├── appengine-hello
│ │ ├── app.go
│ │ ├── app.yaml
│ │ ├── README.md
│ │ └── static
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── script.js
│ │ └── style.css
│ ├── gotypes
│ │ ├── defsuses
│ │ │ └── main.go
│ │ ├── doc
│ │ │ └── main.go
│ │ ├── go-types.md
│ │ ├── hello
│ │ │ └── hello.go
│ │ ├── hugeparam
│ │ │ └── main.go
│ │ ├── implements
│ │ │ └── main.go
│ │ ├── lookup
│ │ │ └── lookup.go
│ │ ├── Makefile
│ │ ├── nilfunc
│ │ │ └── main.go
│ │ ├── pkginfo
│ │ │ └── main.go
│ │ ├── README.md
│ │ ├── skeleton
│ │ │ └── main.go
│ │ ├── typeandvalue
│ │ │ └── main.go
│ │ └── weave.go
│ ├── hello
│ │ └── hello.go
│ ├── LICENSE
│ ├── outyet
│ │ ├── containers.yaml
│ │ ├── Dockerfile
│ │ ├── main.go
│ │ └── main_test.go
│ ├── README.md
│ ├── stringutil
│ │ ├── reverse.go
│ │ └── reverse_test.go
│ └── template
│ ├── image.tmpl
│ ├── index.tmpl
│ └── main.go
└── user
├── hello
│ └── hello.go
└── stringutil
├── reverse.go
└── reverse_test.go
29 directories, 38 files
六、参考网址及博客
- https://go-zh.org/doc/code.html
- https://pmlpml.github.io/ServiceComputingOnCloud/ex-install-go
- https://code.visualstudio.com/docs/setup/linux
- https://github.com/northbright/Notes/blob/master/Golang/china/get-golang-packages-on-golang-org-in-china.md
- https://blog.youkuaiyun.com/wxlSAMA/article/details/82883988
谢谢观看。