探究Go的旅途(1)

454 阅读2分钟

Introduce

先安装~ 我是Mac os 系统,而且本人比较懒肯定用 Homebrew 啦~ brew install go 安装完成后将其添加到.zshrc文件(zsh模式,其他系统、shell模式自行解决)
vim ~/.zshrc

#别问我这个命令哪来的,homebrew 安装完给的
export PATH=$PATH:/usr/local/opt/go/libexec/bin
#{WorkSpace Path}代表你的工作空间目录
export GOPATH={WorkSpace Path} 
export PATH=$PATH:$GOPATH/bin

GOPATH 是一个环境变量,这个环境变量是你工作空间的位置,主要作用就是在执行go 命令的时候方便很多

Note

在工作目录下创建三个子目录(go约定的为啥我也不造)

目录 作用
src 放代码的
pkg 放编译生成文件的
bin 放便编译后可执行文件的

洽谈

src是你开发使用的主要目录,源码都放这里 一般在src下创建一个文件夹,然后放入go文件,比如terminal 中执行

mkdir $GOPATH/src/Hello
cd $GOPATH/src/Hello

创建一个hello.go文件,内容为一下代码

package main
import "fmt"

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

执行

cd $GOPATH/src/Hello
go install

此时就会发现$GOPATH下多了一个bin目录,其中有个叫做Hello的文件,这时刚才在zshrc中添加的export PATH=$PATH:$GOPATH/bin命令就出现了效应~ 我们可以直接在terminal执行

Hello //也可 $GOPATH/bin/Hello
// Hello, world.

这时也就明白了编译出来后src下目录的名字才是包名。

我们的目录结构是这样的$GOPATH/src/Hello/hello.go$GOPATH是工作控件目录,src 放代码的目录,Hello 是子目录也就是应用包名称,hello.go是go文件

Note

Go 有很多开发工具,例如我们刚才直接使用terminal进行开发,我个人使用的JetBrains家的 GoLand,推荐几个(排名顺序不分先后) Sublime Text、 Visual Studio Code、LiteIDE、Atom、Vim、IntelliJ IDEA

交换联系方式

$GOPATH/src/Hello目录下创建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)
}

package导入的应是go文件的目录(也就是路径的最有一个元素),例如我们现在的文件目录是$GOPATH/src/Hello/stringutil,那么我们要导入的就是stringutil 可以执行命令必须使用package main 如何在hello.go中使用这个Reverse函数呢

package main
import (
	"fmt"
	"awesomeProject/stringutil"
)

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

$ cd $GOPATH/src/Hello
$ go install

$ hello
// Hello, Go!

当安装hello程序时,由于stringuntil是依赖,也会被自动安装,运行一下就会看到结果了

Note

一切就绪后,当前目录的层级结构是这样的

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

go install会将stringutil.a对象放到pkg/darwin_amd64目录。

试探

Go 的测试很轻量也很简单,go testtesting包构成。首先我们创建一个test目录,创建一个名字以_test.go结尾的。

创建好后应该是这样的

package test

import(
	"testing"
	"awesomeProject/stringutil"
)

func TestReverse(t *testing.T) {
	cases := []struct {
		in, want string
	}{
		{"Hello, world", "dlrow ,olleH"},
		{"Hello, 世界", "界世 ,olleH"},
		{"", ""},
	}
	for _, c := range cases {
		got := stringutil.Reverse(c.in)
		if got != c.want {
			t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want)
		}
	}
}

terminal 中go test走一走,输出结果

PASS
ok      Hello/test     0.006s

电话联系(远程包)

Go 也可以获取远程联系方式哦~ go get工具,直接获取仓库地址就好

go get github.com/golang/example/hello
$GOPATH/bin/hello
// Hello, Go examples!

使用时直接导入就好`import "github.com/golang/example/stringutil"

学习链接:

go-zh.org/doc/

github.com/astaxie/bui…