天天看點

go語言學習備忘(init)

init函數: 

每個包可以包含任意多個 init 函數,這些函數都會在程式執行開始的時候被調用。所有被編譯器發現的 init 函數都會安排在 main 函數之前執行。 init 函數用在設定包、初始化變量或者其他要在程式運作前優先完成的引導工作。

比如:

package postgres

import (
    "database/sql"
)

func init() {
    sql.Register("postgres", new(PostgresDriver))
}
           
package main

import (
    "database/sql"
    _ "github.com/goinaction/code/chapter3/dbdriver/postgres"
)

func main() {
    sql.Open("postgres", "mydb")
}
           

第一段代碼中,postgres會将自己的驅動注冊到sql包裡面去。是以在第二段代碼中可以直接用sql打開postgres資料庫。

import中導入_ "github.com/goinaction/code/chapter3/dbdriver/postgres"的意義就是:這個庫在我的代碼裡面用不到,但是我依然要導入,導入的時候會先運作該庫的init函數将自己的驅動注冊到sql包中。是以在前面加上下劃線。