导出

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"
)