引言

本文主要聚焦于 如何在centos上搭建go环境以及go入门, 包括搭建go环境,hello world运行, 创建包等操作,初步入门go语言。

安装环境

在管理员权限下, 也就是root用户

sudo yum install golang

安装golang

go version

测试是否安装成功

go 代码结构

这里对理解go语言的结构十分重要

工作空间

go 工具为公共代码仓库中维护的开源代码而设计。 无论你会不会公布代码,该模型设置工作环境的方法都是相同的。

Go代码必须放在工作空间内。它其实就是一个目录,其中包含三个子目录:

  • src 目录包含Go的源文件,它们被组织成包(每个目录都对应一个包),
  • pkg 目录包含包对象,
  • bin 目录包含可执行命令。

go 工具用于构建源码包,并将其生成的二进制文件安装到 pkg 和 bin 目录中。

src 子目录通常包会含多种版本控制的代码仓库(例如Git或Mercurial), 以此来跟踪一个或多个源码包的开发。

所以go语言的工作空间如下

bin/
streak # 可执行命令
todo # 可执行命令
pkg/
linux_amd64/
code.google.com/p/goauth2/
oauth.a # 包对象
github.com/nf/todo/
task.a # 包对象
src/
code.google.com/p/goauth2/
.hg/ # mercurial 代码库元数据
oauth/
oauth.go # 包源码
oauth_test.go # 测试源码
github.com/nf/
streak/
.git/ # git 代码库元数据
oauth.go # 命令源码
streak.go # 命令源码
todo/
.git/ # git 代码库元数据
task/
task.go # 包源码
todo.go # 命令源码

此工作空间包含三个代码库(goauth2、streak 和 todo),两个命令(streak 和 todo) 以及两个库(oauth 和 task)。

命令和库从不同的源码包编译而来。

GOPATH 环境变量

GOPATH 环境变量指定了你的工作空间位置。它或许是你在开发Go代码时, 唯一需要设置的环境变量。

首先创建一个工作空间目录,并设置相应的 GOPATH。

你的工作空间可以放在任何地方,在此我们使用

$HOME/work

注意,它绝对不能和你的Go安装目录相同。(另一种常见的设置是GOPATH=$HOME。)

配置

$ mkdir $HOME/work
$ export GOPATH=$HOME/work

将此工作空间的 bin 子目录添加到你的 PATH 中:后面会用到

 export PATH=$PATH:$GOPATH/bin

or

export GOPATH=$HOME/work | export PATH=$PATH:$GOPATH/bin

包路径

标准库中的包有给定的短路径,比如 “fmt” 和 “net/http”。 对于你自己的包,你必须选择一个基本路径,来保证它不会与将来添加到标准库, 或其它扩展库中的包相冲突。

如果你将你的代码放到了某处的源码库,那就应当使用该源码库的根目录作为你的基本路径。 例如,若你在 GitHub 上有账户 github.com/user 那么它就应该是你的基本路径。

注意,在你能构建这些代码之前,无需将其公布到远程代码库上。只是若你某天会发布它, 这会是个好习惯。在实践中,你可以选择任何路径名,只要它对于标准库和更大的Go生态系统来说, 是唯一的就行。

我们将使用 github.com/user 作为基本路径。在你的工作空间里创建一个目录, 我们将源码存放到其中:

mkdir -p $GOPATH/src/github.com/user

-p是保证能创建多个文件夹

hello world编译运行

在你的工作空间创建一个新文件夹hello

mkdir $GOPATH/src/github.com/user/hello

然后创建一个go文件

cd $GOPATH/src/github.com/user/hello
vim hello.go //vim编辑即可

go代码如下

package main

import "fmt"

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

现在你可以用 go 工具构建并安装此程序了:

go install github.com/user/hello

你可以在系统的任何地方运行此命令。go 工具会根据 GOPATH 指定的工作空间,github.com/user/hello 包内查找源码

如果你进入了hello文件夹 可直接

go install

运行hello world

$GOPATH/bin/hello
或者直接
hello //当你已经把$GOPATH/bin加入到PATH

创建一个库stringutli

首先 创建包路径

mkdir $GOPATH/src/github.com/user/stringutil

然后创建reverse.go文件

vim reverse.go

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 //当你在该包的源码目录

确认 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 install github.com/user/hello
hello

此时工作空间应该为

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 test 命令和 testing 包构成。

你可以通过创建一个名字以 _test.go 结尾的,包含名为 TestXXX 且签名为 func (t *testing.T) 函数的文件来编写测试。 测试框架会运行每一个这样的函数;若该函数调用了像 t.Error 或 t.Fail 这样表示失败的函数,此测试即表示失败。

我们可通过创建文件

$GOPATH/src/github.com/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/user/stringutil
或者
go test //当你已经在包目录下

结果如下

远程包

像Git或Mercurial这样的版本控制系统,可根据导入路径的描述来获取包源代码。**go 工具可通过此特性来从远程代码库自动获取包。**例如,本文档中描述的例子也可存放到Google Code上的Mercurial仓库 code.google.com/p/go.example 中,若你在包的导入路径中包含了代码仓库的URL,go get 就会自动地获取、 构建并安装它:

go get github.com/golang/example/hello
GOPATH/bin/hello

Centos搭建go环境以及go入门的更多相关文章

  1. 基于Centos搭建Jenkins 环境搭建

    系统要求: CentOS 7.2 64 位操作系统 安装 Jenkins Jenkins 简介 Jenkins 是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提 ...

  2. Centos搭建 Docker 环境

    搭建 Docker 环境 安装与配置 Docker 安装 Docker Docker 软件包已经包括在默认的 CentOS-Extras 软件源里.因此想要安装 docker,只需要运行下面的 yum ...

  3. CentOS搭建LAMP环境

    最近准备安装roundcube,需要先搭建一个 LAMP 运行环境,从网上搜索了一下,有不少资料.自己也按部就班安装了一遍,把过程整理了下来. LAMP 是Linux, Apache, MySQL, ...

  4. 阿里云Centos搭建jdk环境

    当我们开始了自己的开发,那么云服务器是一定少不了的,当然也有很多同学只是在本地做开发研究. 这里记录一下我自己在阿里云上搭建环境的过程. 趁着优惠的时候,我在阿里云上购买了ECS云服务器,并且搭载了C ...

  5. 基于Centos搭建Django 环境搭建

    CentOS 7.2 64 位操作系统 安装 Django 先安装 PIP,再通过 PIP 安装 Django 安装 PIP cd /data; mkdir tmp; cd tmp; wget htt ...

  6. 基于Centos搭建Laravel 环境搭建

    系统要求:CentOS 7.2 64 位操作系统 安装 Laravel Laravel 简介 Laravel 是一套简洁.优雅的 PHP Web 开发框架.它可以让你从面条一样杂乱的代码中解脱出来:它 ...

  7. CentOS搭建NodeJS环境

    事件驱动,承受高并发……这些耀眼的光环,使前端开发者不能不去学习NodeJS. 今天就在开发环境把NodeJS搭建起来了. 1. 下载node wget http://nodejs.org/dist/ ...

  8. centos 搭建docker环境

    我有一台便宜的腾讯云服务器,当然配置自然也是最低的,只是用来平常玩一玩,学习的用处,下面介绍一下我在上面搭建docker的心得,共勉一下. 安装与配置 Docker 安装 Docker Docker ...

  9. CentOS搭建Sqoop环境

              Sqoop是一个用来将Hadoop(Hive.HBase)和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如:MySQL ,Oracle ,Postgres等)中的 ...

随机推荐

  1. 更优雅的在 Xunit 中使用依赖注入

    Xunit.DependencyInjection 7.0 发布了 Intro 上次我们已经介绍过一次大师的 Xunit.DependencyInjection https://www.cnblogs ...

  2. UVALive - 3644 X-Plosives (并查集)

    A secret service developed a new kind of explosive that attain its volatile property only when a spe ...

  3. 96年/离职8个月/拒绝华为offer/目前自由职业-记这大半年来的挣扎与迷茫

    仅以此文,记录自己这大半年来的挣扎与迷茫. 2019 年 11 月 在公司工作七个月之后,我被裁员了. 回忆自己这七个月的经历,不管是遇到的人和事,更多感到的是收获和感恩,于是我写下了:「应届毕业生工 ...

  4. Python(set/list/dict/tuple)

    set集合:set是一个无序,不重复元素的集合.可嵌套列表,字典(可以for循环或者迭代的对象). ######差集: a={11,22} b={22,33} c=a.difference(b) #a ...

  5. Python package project

    使用 Python 书写项目打包程序(已经存在 shell 的脚本,经过对比 Python 脚本的执行过程更加的可控人性化实现的功能相同) #!/usr/bin/env python # _*_cod ...

  6. 关于C语言内存占用

    struct T { char a; int *d; int b; int c:16; double e; }; T *p; 在64位系统以及64位编译器下,以下描述正确的是 A. sizeof(p) ...

  7. Day08_商品规格管理

    学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 0.学习 ...

  8. Django 项目分析后得到的某些结论

    项目下的 urls 篇 urlpatterns = [ ] 其中主要是包含有各个 app 的路由 示例: url(r'^users/', include('users.urls', namespace ...

  9. 安装 kreas 2.2.4 版本问题

    python 版本 3.6 不要使用 3.7 和 3.8 否则导致安装失败 tensorflow 使用 1.12.0 keras 使用 2.2.4 版本 pip install 包名 -i http: ...

  10. Unicode 字符串

    Unicode 字符串 Python 中定义一个 Unicode 字符串和定义一个普通字符串一样简单:高佣联盟 www.cgewang.com >>> u'Hello World ! ...