main和package
每個包下只能有一個main函數,且包含這個main函數的包名必須命名爲 package main 否則無法找到main函數,
包要滿足一下條件:
- 一個目錄下的同級文件歸屬一個包。也就是說,在同一個包下面的所有文件的package名,都是一 樣的。
- 在同一個包下面的文件package名都建議設爲是該目錄名,但也可以不是。也就是說,包名可以與其目錄不同名。
- 包名爲main的包爲應用程序的入口包,其他包不能使用。
命名包的規則如下:
package 包名
包內的屬性和方法命名規則:
大寫字母代表 public ,其他包可以使用此屬性或者方法
小寫字母代表 privet , 其他包不能使用
main包導入其他本地包:
如圖所示
文件結構爲:
demo
|------src
|------hello
|------sayHello
|--------hello.go
|--------main.go
//hello.go的內容
package sayHello
import "fmt"
func Hello() {
fmt.Println("hello")
}
//main.go的內容
package main
import "demo/hello/sayHello"
func main() {
//此處調用hello.go的Hello方法,需要import sayHello包
sayHello.Hello()
}
注意點:
- 沒有使用go.mod的話就需要把項目設置在GOPATH的src文件下,因爲在導入包的時候是在GOPATH的src目錄下找的
- import導入時,會從GO的安裝目錄(也就是GOROOT環境變量設置的目錄)和GOPATH環境變量設置的目錄中,
檢索src/package來導入包。如果不存在,則導入失敗。(GOROOT,就是GO內置的包所在的位置。GOPATH,就是我們自己定義的包的位置。) - 通常我們在開發Go項目時,調試或者編譯構建時,需要設置GOPATH指向我們的項目目錄,目錄中的src目錄中的
包就可以被導入了。
導入包的其他幾種方式:
1、合併導入
import {
"package1"
"package2"
}
2、點操作
import {
."fmt"
}
func main(){
//fmt.Println("沒有.的話就要帶上fmt.哦")
Println("導入包有.的話就可以直接打印啦")
}
3、起別名
import {
p "package"
}
這樣就可以用p.method代替package.method了,p是package的別稱
4、 _ 下劃線導包
import {
_"package"
}
不直接使用包內的函數,而是調用了包內的 init() 函數進行初始化