服务计算二 · 安装 go 语言开发环境

本文详细介绍在CentOS7系统中搭建Go语言开发环境的过程,包括安装VSCode、golang,配置环境变量,创建并运行首个Go语言程序,以及安装必要的工具和插件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

服务计算 [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 工具用于构建源码包,并将其生成的二进制文件安装到 pkgbin 目录中。

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.Errort.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

六、参考网址及博客

谢谢观看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值