• Centos搭建go环境以及go入门


    引言

    本文主要聚焦于 如何在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.
    ")
    }
    

    现在你可以用 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
    

    在这里插入图片描述

  • 相关阅读:
    Android中通过intent打开浏览器到指定网页
    iOS真机调试
    Autodesk Infrastructure Modeler(AIM)冉冉升起的新星
    IKVM.NET_07_用户指南_IKVM.NET 字节码编译器(ikvmc.exe)
    我们——程序员应该关注,功能?设计?
    系统集成的困境
    系统服务_时间同步服务器
    ASP.NET_ASP.NET 缓存Cache
    IKVM.NET_第五篇_用户指南_安装
    IKVM.NET_第四篇_用户指南_概述
  • 原文地址:https://www.cnblogs.com/qq874455953/p/9901059.html
Copyright © 2020-2023  润新知