与main包的main函数相对应,其他的package也有初始化函数,叫init,在定义时也是不能有参数和返回值。初始化包时,init函数会被自动调用。
和动态链接很像(应该就是),当一个包被多个包同时引入,内存中只会有这个包的一份拷贝。当一个包引入了其他包时,会先将这些需要的包引入,初始化这些包中的包级变量和常量,然后才会执行本包的init函数,这个过程会随着包的引入一层一层的进行。
main包中如果也有定义init函数,则会先执行init函数,然后执行main函数。
与python类似,go中引入包也用import语句。如果用点操作引入,就是在import和包名之间加一个点,表示后面调用这个包内地函数时,可以忽略前缀的包名。 而在包名和import之间写一个其他单词可以给这个包起一个别名,调用包函数的时候可以使用这个别名代替包名。 如果在import和包名之间加一个下划线,则表示引入该包但不直接使用里面的函数,只调用这个包的init函数。
go中也有struct类型,struct声明方式是type struct_name struct{字段名 字段类型}。和c++一样,struct的变量使用点操作符获取或者更改内部的属性。