Go 之基礎速學 (十三) golang 裡包的特殊使用和 init () 構造方法的使用

huxiaobai_001發表於2020-05-09

先來說一下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 協議》,轉載必須註明作者和本文連結

胡軍

相關文章