Go 之基础速学 (十三) golang 里包的特殊使用和 init () 构造方法的使用

先来说一下golang里面包的一些使用技巧:

//main.go文件:
package main
import (
   // s 表示是 com.huxiaobai/servicesa的别名
   s "com.huxiaobai/servicesa"
   //. "com.huxiaobai/servicesa" 如果是 . "包路径" 那么在代码里面调用的时候可以不用写别名以及包名称 直接用要使用到的函数或者结构体即可 但是包如果多了的话如果有重名的那就悲剧了!所以合理选择使用别名还是点
   "fmt" "github.com/pquerna/ffjson/ffjson"
)

func main(){
    //比如你在servicea包里面的MyService结构体当中写了一些逻辑 现在换领导了你又在servicea包里面的MyService结构体当中写了一套 现在要你切换包 很简单啊 直接改包名称就行啊 那万一代码有成千上万行 有好多地方都用到了怎么办呢?是不是就傻眼了?来,今天来个简单的做法 直接用s来代替包名称 这样你就可以直接改上边s别名对应的包路径就行了 不用再去费劲巴拉的去改代码里面每个用到的地方!
    var isa string = new(s.MyService).Create("huxiaobai")

}
//servicea包里面的MyService.go文件内容:
package servicesa

type MyService struct {

}

func (my *MyService) Create(name string) string {
    return "my name is a"
}
//serviceb包里面的MyService.go文件内容:
package servicesb

type MyService struct {

}

func (my *MyService) Create(name string) string {
   return "my name is b"
}

现在我们再来说一下golang里面init()构造函数的使用:
首先来叨叨几句main()入口函数:
main只能运用于 package main包里面 所有的程序启动都是基于main函数来启动的 不可以有参数和返回值 package main要和 func main(){}放在一起 是一对的哦
init()函数:
init函数 能够应用于所有的package包 可以有多个 均会执行 不可以有参数和返回值 可以随便写在包里面任何文件的任何地方 都会被执行到 并且可以有多个 如图所示:
这一个一个的包里面的任何文件里面都可以放init()构造函数 并且可以有多个 都会被执行到
Go 之基础速学 (十三) golang 里包的特殊使用和init()构造方法的使用
init()构造函数执行的时机:
在main()函数当中需要引用a包里面的结构体或者函数那么当然得import a包了 这是前提哈!在main()函数当中引用到了,import了a包那么这个时候才会关联执行init()构造函数 不管a包里面有多少个init()构造函数都会执行 并且执行的顺序是按照init()所在的文件名称的顺序执行 并且是asc顺序执行!
main()函数执行时候的简单声明周期如下:
初始化包常量/变量 –> 执行包内的init函数 –>执行main函数
举个例子 import当中的 _ “com.huxiaobai/servicea” 小的下划线表示单存的引入 但是没有使用到包里面的任何东西 目的就是为了在引入的时候执行servicea包里面的init()构造函数 这,是一种代码套路、技巧!
Go 之基础速学 (十三) golang 里包的特殊使用和 init () 构造方法的使用

本作品采用《CC 协议》,转载必须注明作者和本文链接
胡军
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!