摘要:摘要: 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============
相关文章推荐
智能云建站有什么优点?网页布局技巧有哪些? 2022-01-10
域名 价格 趋势怎么样?域名投资和其他投资有什么区别?-域名注册专题2021-12-28
查询域名备案信息是否存在安全隐患?2021-12-28
xyz域名是什么意思,都有哪些特点?-域名注册专题2021-12-27
“六王”.com五位数被秒,三数.cn近2万成交!2021-12-27