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() 函数进行初始化