init()函數(shù)

package utils

import "fmt"

//目錄和包的名字不一定相同,但是往往要一直
//同一個目錄下包名必須一樣
//大寫可以導(dǎo)出
func Count(){
    fmt.Println("utils包的Count()函數(shù)")
}

func init(){
    fmt.Println("units包的init()函數(shù)")
}

package main

import "demo/utils" //絕對路徑

func main(){

    /*
    一個目錄下的同級文件歸屬一個包,package的生命要一致
    package生命的包和對應(yīng)的目錄可以不一致
    */

    //utils.Count()
    //timeutils.PrintTime()
    //
    //pk2.MyTest1()

    utils.Count()
}

package utils

import "fmt"

//目錄和包的名字不一定相同,但是往往要一直
//同一個目錄下包名必須一樣
//大寫可以導(dǎo)出
func Count(){
    fmt.Println("utils包的Count()函數(shù)")
}

func init(){
    fmt.Println("units包的init()函數(shù)")
}

func init(){
    fmt.Println("units包的另一個init()函數(shù)")
}

package main

import (
    "demo/pk2"
    "demo/utils"
) //絕對路徑

func main(){

    /*
    一個目錄下的同級文件歸屬一個包,package的生命要一致
    package生命的包和對應(yīng)的目錄可以不一致
    */

    //utils.Count()
    //timeutils.PrintTime()
    //
    pk2.MyTest1()

    utils.Count()
}

先導(dǎo)入的包的init函數(shù)先執(zhí)行

init()函數(shù)和main()函數(shù)

  1. 這兩個函數(shù)都是go中的保留函數(shù)
  2. 定義的時候不能有參數(shù),返回值,只能由go程序自動調(diào)用,不能被引用
  3. init函數(shù)可以定義在任意包,可以有多個,main函數(shù)只能在main包下,并且只能有一個
  4. 執(zhí)行順序
    見上圖

包的其他注意點

package main

import (
    _ "demo/pk2"
) //絕對路徑

func main(){

    /*
    一個目錄下的同級文件歸屬一個包,package的生命要一致
    package生命的包和對應(yīng)的目錄可以不一致
    */

    //utils.Count()
    //timeutils.PrintTime()


    //只想調(diào)用MyTest1的init函數(shù),不想調(diào)用這個函數(shù)
    // pk2.MyTest1()

    // utils.Count()
}

  1. 可以下載下來放到src目錄下,目錄src/github.com/go-sql-driver/mysql 然后再放下源代碼

適合沒有網(wǎng)絡(luò),拷貝來的

  1. 命令行任意位置執(zhí)行 go get github.com/go-sql-driver/mysql
package main

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"

    _ "demo/pk2"
) //絕對路徑

func main(){

    /*
    一個目錄下的同級文件歸屬一個包,package的生命要一致
    package生命的包和對應(yīng)的目錄可以不一致
    */

    //utils.Count()
    //timeutils.PrintTime()


    //只想調(diào)用MyTest1的init函數(shù),不想調(diào)用這個函數(shù)
    // pk2.MyTest1()

    // utils.Count()

    // database/sql 打開數(shù)據(jù)庫
    // 用下劃線導(dǎo)入github.com/go-sql-driver/mysql,只使用里面的init函數(shù)初始化
    db,err := sql.Open("mysql","root:用戶密碼@tcp(127.0.0.1:3306)/數(shù)據(jù)庫名字?charset=utf8")
    if err != nil {
        fmt.Println("錯誤信息:",err)
        return
    }
    fmt.Println("連接成功",db)

}

包會被編譯為.a文件,在pkg目錄下

go build demo
./demo

這樣執(zhí)行是沒有.a文件的

需要go install demo/pk2

直接點擊運行里面包含go install

time包

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    /*
    time包:
        1年=365天
        1天=24小時
        1小時=60分鐘
        1分鐘=60秒

        毫秒 millisecond
        微秒 microsecond
        納秒 nanosecond
        皮秒 picosecond
    我們獲取
    */

    //1。獲取當前時間
    t1 := time.Now()
    fmt.Printf("%T\n",t1) //time.Time
    fmt.Println(t1) //2020-03-17 11:13:59.686591 +0800 CST m=+0.000468423

    //2。 獲取當前的時間
    t2 := time.Date(2020,3,17,11,16,30,0,time.Local)
    fmt.Println(t2) //2020-03-17 11:16:30 +0800 CST

    //3。 time string之間的轉(zhuǎn)換  模版不可以改變 1 2 3 4 5 6,不然會出錯,紀念go
    s1 := t1.Format("2006年1月2日 15:04:05")
    fmt.Println(s1) //2020年3月17日 11:22:43

    s2 := t1.Format("2006/01/02")
    fmt.Println(s2) //2020/03/17

    s3 := "1999年02月21日" //string 寫成2月21日下面的模版就解析不了了
    t3,err := time.Parse("2006年01月02日",s3)
    if err != nil {
        fmt.Println("err:",err)
    }
    fmt.Println(t3) //1999-02-21 00:00:00 +0000 UTC
    fmt.Printf("%T\n",t3) //time.Time


    //4。 獲取單獨日期的方法,不是函數(shù),因為指定了time 類型的對象
    year,month,day := t1.Date() //年月日
    fmt.Println(year,month,day) //2020 March 17 month是包定義的類型,里面有常量

    hour,min,sec := t1.Clock()
    fmt.Println(hour,min,sec) //11 33 12

    year2 := t1.Year()
    fmt.Println("年:",year2) //年: 2020
    fmt.Println(t1.YearDay()) //過了多少天 77

    fmt.Println(t1.Weekday()) //Tuesday

    //5. 時間戳:指定的日期 距離1970年1月1日0時0分0秒的時間差值 秒,納秒
    t4 := time.Date(1970,1,1,1,0,0,0,time.UTC)
    timestamp1 := t4.Unix() //秒差值 3600
    fmt.Println(timestamp1) //
    timestamp2 := t1.Unix()
    fmt.Println(timestamp2) //1584416475

    timestamp3 := t4.UnixNano() //納秒差值
    fmt.Println(timestamp3) //3600000000000

    //6。 時間間隔
    t5 := t1.Add(time.Minute)
    fmt.Println(t1) //2020-03-17 11:43:31.081654 +0800 CST m=+0.000417273
    fmt.Println(t5) //2020-03-17 11:44:31.081654 +0800 CST m=+60.000417273
    fmt.Println(t1.Add(24 * time.Hour)) //2020-03-18 11:43:31.081654 +0800 CST m=+86400.000417273

    //7. 程序睡眠
    time.Sleep(3 * time.Second) //讓當前的程序進入睡眠狀態(tài)
    fmt.Println("main...over...")

    rand.Seed(time.Now().UnixNano())
    randNum := rand.Intn(10) + 1 //int
    fmt.Println(randNum)
    time.Sleep(time.Duration(randNum) * time.Second) //duration 持續(xù)
    fmt.Println("睡醒了")


}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容