导出
golang中默认以文件夹名作为包名,导入的文件的路径为$GOPATH/src
例如我们在 $GOPATH/src下面建立一个gopackage的一个文件夹,下面建立一个abc.go的文件,文件内容如下
package gopackage
import "fmt"
const X = 5
var Y = 10
// Add int 加
func Add(x, y int) int {
return x + y
}
// Minus int 减
func Minus(x, y int) int {
return x - y
}
func mutiply(x,y int) int {
return x * y
}
则我们在包外部使用gopackage包中的函数时,导入格式是这样的:
package main
import (
"fmt"
"gopackage"
)
func main() {
x, y := gopackage.X, gopackage.Y
fmt.Println(gopackage.Add(x, y))
fmt.Println(gopackage.Minus(x, y))
// fmt.Println(gopackage.mutiply(x,y)) //mutiply not exported by package gopackage
}
我们在abc.go文件中需要导出的函数的首字母都是大写的,这是因为只有首字母大写的标识符才可以导出,mutiply(int,int)int函数不可以被导出,编译失败。
别名
当我们使用多个自定义包时如果发生冲突,怎么办呢,我们可以给不同的包提供不同的别名
package main
import (
"fmt"
calculate "gopackage"
)
func main(){
// fmt.Println(gopackage.Add(x, y))
fmt.Println(calculate.Add(1, 1)) //使用别名调用相应函数
}
如果abc.go文件中包名不是文件夹的名字,如
// package gopackage
package abc
则在外部导入是,golang会自动为该包提供别名
package main
import (
"fmt"
abc "gopackage"
)