1. 包
srC目录是以代码包的形式组织并保存Go源码文件的。每个代码包都和src目录下的文件夹一一对应。 每个子目录都是一个代码包。
- 一个目录下的同级文件归属一个包。也就是说,在同一个包下面的所有文件的package名, 都是一样的。
- 在同一个包下面的文件package名都建议设为是该目录名,但也可以不是。也就是说,包名可以与其目录不同名。
- 包可以嵌套,比如utils目录下有名为utils的包,并嵌套一个timeUtils目录,该目录下有个timeUtils包。
- 同包下的函数不需要导入包,可以直接使用。
- 包名为main的包为应用程序的入口包,其他包不能使用。
import . "fmt"
这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面你调用的fmt.PrintIn("hello world")
可以省略的写成Println("hello world")
,但是不建议这样做
2. init()函数
Init()
函数不能有任何的参数和返回值,一个.go
文件中可以存在多个init()
函数
导入顺序:
- 对同一个go文件的
init( )
调用顺序是从上到下的。 - 对同一个package中的不同文件,将文件名按字符串进行”从小到大”排序,之后顺序调用各文件中的
init()
函数。 - 对于不同的package,如果不相互依赖的话,按照main包中import的顺序调用其包中的
init()
函数。 - 如果package存在依赖,调用顺序为最后被依赖的最先被初始化,例如:导入顺序main -> A -> B -> C,则初始化顺序カC -> B -> A -> main, 依次执行对应的
init()
函数。main包总是被最后一个初始化,因カ它总是依赖別的包。
一个包被多个包import,但只能被初始化一次。
3. go语言协程
一旦主协程执行结束,即使子协程没有执行完也会立即终止。
4. 接口
- 当使用接口类型的对象时,可以用任意实现类对象代替
- 当将接口实现类对象赋值给接口对象时,接口对象不能访问实现类对象中的属性
断言是对接口对象进行的操作
- instance := 接口对象.(实际类型) // 不安全,会引发panic
- instance, ok := 接口对象.(实际类型) //安全