








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ù)
- 這兩個函數(shù)都是go中的保留函數(shù)
- 定義的時候不能有參數(shù),返回值,只能由go程序自動調(diào)用,不能被引用
- init函數(shù)可以定義在任意包,可以有多個,main函數(shù)只能在main包下,并且只能有一個
- 執(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()
}


- 可以下載下來放到src目錄下,目錄
src/github.com/go-sql-driver/mysql然后再放下源代碼
適合沒有網(wǎng)絡(luò),拷貝來的
- 命令行任意位置執(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("睡醒了")
}
