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 := 接口对象.(实际类型) //安全