go调用linux命令 go调用命令行( 三 )


4、导入路径
一个导入路径是唯一标识一个包的字符串 。一个包的导入路径对应于它在工作区内或远程存储库中的位置 。
从标准库的软件包中给出了短的导入路径等 。对于您自己的包,您必须选择不可能和未来添加到标准库或其他外部库的基础路径冲突的路径 。
注意,你不需要将你的代码发布到一个远程存储库之前,你可以建立它 。这只是一个很好的习惯来组织你的代码,如果你有一天会出版它 。在实践中,你可以选择任何任意的路径名称 , 只要它是唯一的标准库和更大的去生态系统 。
我们将使用github.com/user作为我们的基本路径 。在您的工作区中创建一个目录,以保持源代码:
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是为了根据操作系统和你的系统架构交叉编译 。

推荐阅读