Go语言常用的开发环境 go语言开发的项目有哪些( 三 )


mkdir -p $GOPATH/src/github.com/user
5、第一个项目
编译并运行一个简单的程序,首先选择一个包的路径(我们将使用github.com/user/hello)和创建在您的工作区相应的软件包目录:
mkdir $GOPATH/src/github.com/user/hello
创建名叫hello.go的文件,上面创建过,此处略过 。
cd $GOPATH/src/github.com/user/hello
go install
$GOPATH/bin/hello
或者:
hello
如果你使用的是一个源代码管理系统,现在是一个很好的时间来初始化一个存储库 , 添加文件,并提交你的第一次更改 。再次 , 这一步是可选的:您不需要使用源代码管理来写代码 。
cd $GOPATH/src/github.com/user/hello
git init
Initialized empty Git repository in /data/work/src/github.com/user/hello/.git/
git add hello.go
git commit -m "first commit"
[master (root-commit) bbfb477] first commit
6、first library
mkdir $GOPATH/src/github.com/user/stringutil
下一步,在目录下创建一个名为reverse.go文件中有下列内容:
// Package stringutil contains utility functions for working with strings.
package stringutil
// Reverse returns its argument string reversed rune-wise left to right.
func Reverse(s string) string {
r := []rune(s)
for i, j := 0, len(r)-1; ilen(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
上面操作并不会产生一个输出文件,必须使用go install,把包和对象输出到工作去的pkg目录内
确认stringutil包创建完成后,修改原始hello.go,使用stringutil包:
package main
import (
"fmt"
"github.com/user/stringutil"
)
func main() {
fmt.Printf(stringutil.Reverse("\n !oG ,olleH"))
}
无论使用go安装包还是二进制文件 , 所有相关的依赖都会自动安装 。所以当你安装hello程序时:
$ go install github.com/user/hello
对应的stringutil包会自动安装好 。
执行新的hello程序,可以看到消息已经被反转
# hello
Hello, Go!
完成上面操作之后,工作区应该为:
├── bin
│└── hello# command executable
├── pkg
│└── linux_amd64# this will reflect your OS and architecture
│└── github.com
│└── user
│└── stringutil.a# package object
└── src
└── github.com
└── user
├── hello
│└── hello.go# command source
└── stringutil
└── reverse.go# package source
注意:go install会把库文件stringutil.a放到pkg/linux_amd64下边(目录结构跟源代码结构一样) 。这样可以go命令可以直接找到对应的包对象 , 避免不必要的重复编译 。linux_amd64是为了根据操作系统和你的系统架构交叉编译 。
所有Go可执行程序都通过静态方式链接在一起,所以在运行时是不需要相关的包对象(库) 。
7、包命令
所有的Go源代码都以下面的语句开始:
package name
其中name就是包引用默认的名称,一个包中的所有文件必须使用同一个包名,可执行命令必须是main 。
一个二进制文件下所有的包名不需要唯一 , 但是引用路径必须唯一
8、测试
Go自带了一个轻量级的测试框架 , 由go test和testing包组成 。
可以通过新建xx_test.go写一个测试,其中包含若干个TestXXX函数 。测试框架会自动执行这些函数;如果函数中包含tError或t.Fail, 对应的测试会被判为失败 。

推荐阅读