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 test和testing包构成。首先我们创建一个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"