golang 初始化顺序

1.import机制

● main -> import pkg1 -> const -> var ... -> init() -> main()

● pkg1 -> import pkg2 -> const -> ...

● pkg2 -> ...

import(

    "time"                       //普通写法

    . "fmt"                       //使用此包内的成员时不带fmt前缀

    j "encoding/json"    //json包重命名

                                     // 引入包顺序遵循 标准库,项目包,第三方包

)

        不要使用相对路径引入包(以GOPATH/src作为根目录)

        import 后面跟着包路径。go语言的惯例只是一个特例,即恰好目录名与包名一致。import中的foo只是一个文件系统的路径。而下面foo.Foo()中的foo则是包名。而这个包是在src/foo目录下的源码中找到的。


2. init函数

        init函数可以在任何包中有0个或1个或多个; init函数和main函数都不能被显示调用;

        但这无论是对于可读性还是以后的可维护性来说,强烈建议用户在一个package中每个文件只写一个init函数。


3. 变量初始化顺序

        全局变量初始化若有需要依赖其它变量,则被依赖的变量先初始化。但局部变量这样的话就会报错

    var a int = b + 1

    var b int = 1


        下面例子会报 "initialization loop" 错误

   var a = b

   var b = c

   var c = a


4. 类型检查

        Go编译器可以从初始化表达式的右值推导出该变量应该声明为哪种类型,这让Go语言看起来有点像动态类型语言,但是Go语言实际上是强类型语言(静态类型语言)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,009评论 19 139
  • Scala与Java的关系 Scala与Java的关系是非常紧密的!! 因为Scala是基于Java虚拟机,也就是...
    灯火gg阅读 3,499评论 1 24
  • 选择题 [primary] 下面属于关键字的是() A. func B. def C. struct D. cla...
    盘木阅读 1,849评论 0 29
  • 价格是个很复杂的东西,直接关系到企业的盈利情况,在定价过程中,应该考量哪些因素呢? 1. 定价是为了获得利润 利润...
    橙子LifeX阅读 807评论 1 2
  • 邻居张婶膝下有两个儿子,平日里特别羡慕别人家有儿有女凑成了好字,自叹自己命薄,没有女儿。 左邻右舍打趣说:“抱个不...
    百合88阅读 181评论 5 5