Go导入自定义包

摘要:摘要: Go导入自定义包

Go导入自定义包

GOPATH:

GOPATH="/Users/xinxingegeya/mygo:/Users/xinxingegeya/workspace-go"

我们自定义的包可能要分发出去,包的导入路径最好以互联网的域名为前缀,避免重复。在src目录下建立以域名命名的目录,如下,

➜ src pwd /Users/xinxingegeya/workspace-go/src ➜ src mkdir yale.com ➜ src ll total 0 drwxr-xr-x 5 xinxingegeya staff 170B 7 26 16:02 yale.com

在yale.com目录下,我们就可以建立自己的包,如下目录结构,

➜ yale.com pwd /Users/xinxingegeya/workspace-go/src/yale.com ➜ yale.com tree -L 4 . ├── bank │ └── bank.go ├── cal │ ├── add.go │ ├── multi │ │ └── multiply.go │ └── subtract.go └── test └── main.go 4 directories, 5 files ➜ yale.com

就是我们自定义的包和go文件。

bank.go

package bank import ( "sync" ) var ( mu sync.Mutex // guards balance balance int ) func Withdraw(amount int) bool { mu.Lock() defer mu.Unlock() deposit(-amount) if balance < 0 { deposit(amount) return false // insufficient funds } return true } func Deposit(amount int) { mu.Lock() defer mu.Unlock() deposit(amount) } func Balance() int { mu.Lock() defer mu.Unlock() return balance } // This function requires that the lock be held. func deposit(amount int) { balance += amount }

add.go

package cal // 同一个包下可以包含多个go文件 func Add(n1, n2 int) (res int) { return n1 + n2 }

subtract.go

package cal // 同一个包下可以包含多个go文件 func Subtract(n1, n2 int) (res int) { return n1 - n2 }

multiply.go

package multi //go 文件名可以和包名不一致,但一定要和导入路径中的报名一致 //比如这个包的导入路径为 : "yale.com/cal/multi" //所以这里的 package multi ,必须是multi func Multi(n1, n2 int) (res int) { return n1 * n2 }

main.go

package main import ( //go自带工具包 "fmt" //绝对路径,加载 GOPATH/src/yale.com/bank包 //这里使用域名作为前缀 //Go语言的规范并没有指明包的导入路径字符串的具体含义,导入路径的具体含义是由构建工具来解释的。 //如果你计划分享或发布包,那么导入路径最好是全球唯一的。 //为了避免冲突,所有非标准库包的导入路径建议以所在组织的互联网域名为前缀;而且这样也有利于包的检索。 "yale.com/bank" "yale.com/cal" "yale.com/cal/multi" ) func main() { bank.Deposit(10000) balance := cal.Subtract(10000, 2000) if bank.Withdraw(balance) { fmt.Println("withdraw success") } else { fmt.Println("withdraw failure") } balance = bank.Balance() fmt.Printf("balance=%d\n", balance) res := multi.Multi(1, 2) fmt.Println(res) }

最后使用go build编译项目,

➜ yale.com pwd /Users/xinxingegeya/workspace-go/src/yale.com ➜ yale.com go build can't load package: package yale.com: no buildable Go source files in /Users/xinxingegeya/workspace-go/src/yale.com

可以看到no buildable Go source files,所以要进入到main包所在的目录运行go build命令,

➜ yale.com cd test ➜ test go build ➜ test ll total 4416 -rw-r--r-- 1 xinxingegeya staff 871B 7 26 16:00 main.go -rwxr-xr-x 1 xinxingegeya staff 2.1M 7 26 16:39 test ➜ test ./test withdraw success balance=2000 2 ➜ test

可以看到在当前目录创建了一个可执行程序test;以导入路径的最后一段作为可执行程序的名字。并且执行成功。

如果想在GOPATH/bin下生成可执行文件,可以在main包所在到目录下运行go install命令,

➜ test pwd /Users/xinxingegeya/workspace-go/src/yale.com/test ➜ test go install

更详细的Go语言命令请看:http://blog.csdn.net/wuya814070935/article/details/50219915

============END============