Golang——包

2020-06-09  本文已影响0人  Cici冬雪

package是源码(.go文件)的集合。

package 包名

注意:

如果想在一个包中引用另一个包里的标识符(如变量、常量、类型、函数等),该标识符必须是对外可见的(public)。在Go语言中只需要将标识符的首字母大写就可以让标识符对外可见。

包的导入

import "包的路径"

注意:

import "包名1"
import (
  "包名2"   //系统包

  "包名3"  //自定义包
)

示例代码:

自定义包名

package 别名 包名

匿名导入包
只希望导入包,而不使用包内部的数据。
匿名导入的包与其它导入的包一样都会编译到可执行过文件中。

package _ "包的路径"

init()初始化函数

Go语言在导入包时候自动出发内部的init()函数调用。
init()函数没有参数也没有返回值,在程序中自动调用执行,不能主动去调用。

image.png

导入包顺序


image.png

Demo

目录结构是src/code/lvdx6/com/backend/testproject下的main和test目录


image.png
package main

import (
    "fmt"

    "code/lvdx6/com/backend/testproject/test"
)

func init(){
    fmt.Println("main package main.go init()")
}

func main(){
    fmt.Println("main package main.go调用test package的test.go中的方法")
    test.Test()
    fmt.Println("main package main.go调用同一个包下的haha.go中的方法")
    Haha() 
}
package main


import "fmt"

func init() {
    fmt.Println("main package haha.go init()")
}

func Haha() {
    fmt.Println("main package haha.go")
}
package test

import "fmt"

func init() {
    fmt.Println("test package test.go init()")
}

func Test() {
    fmt.Println("test package test.go")
}
# go run main.go haha.go
test package test.go init()
main package main.go init()
main package haha.go init()
main package main.go调用test package的test.go中的方法
test package test.go
main package main.go调用同一个包下的haha.go中的方法
main package haha.go

time包

package main

import (
    "fmt"
    "time"
)

func main(){
    now := time.Now()
    fmt.Printf("当前时间是:%#v\n", now)

    year := now.Year()
    month := now.Month()
    day := now.Day()
    hour := now.Hour()
    minute := now.Minute()
    second := now.Second()
        //获取纳秒
    // ns := now.Nanosecond()
    fmt.Printf("当前时间是:%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second)
}
输出结果是
当前时间是:time.Time{wall:0xbfafe8044ab66a98, ext:5005601, loc:(*time.Location)(0x58bb80)}
当前时间是:2020-06-09 14:13:37

时间戳
从1970年1月1日(08:00:00GMT)至当前时间的总毫秒数,也被成为Unix时间戳(UnixTimestamp)。
使用time.Unix()函数将时间戳转为时间格式。

package main

import (
    "fmt"
    "time"
)

func main(){
    now := time.Now()
    fmt.Printf("当前时间是:%#v\n", now)

    //获取时间戳
    timestamp1 := now.Unix()
    timestamp2 := now.UnixNano()
    fmt.Printf("当前时间戳是:%#v\n", timestamp1)
    fmt.Printf("当前时间戳(纳秒)是:%#v\n", timestamp2)

    //使用time.Unix()函数讲时间戳转为时间格式
    timeObj := time.Unix(timestamp1, 0)
    fmt.Println(timeObj)
    fmt.Printf("使用time.Unix()函数讲时间戳转为时间格式是:%#v\n", timeObj)
    fmt.Printf("当前时间是:%d-%02d-%02d %02d:%02d:%02d\n", timeObj.Year(), timeObj.Month(), timeObj.Day(), timeObj.Hour(), timeObj.Minute(), timeObj.Second())
}

时间格式化
使用Format进行格式化,不是常见的Y-m-d H:M:S格式化,而是使用Go的诞生时间2006年1月2号15点04分(2006 1 2 3 4)。

package main

import (
    "fmt"
    "time"
)

func main(){
    now := time.Now()
    fmt.Println(now.Format("2006-01-02 15:04:05"))
    fmt.Println(now.Format("2006-1-2 15:4:5"))
    fmt.Println(now.Format("2006/01/02 15:04:05"))
    fmt.Println(now.Format("15:04:05 2006/01/02"))
    fmt.Println(now.Format("2006/01/02"))

    // 纳秒
    fmt.Println(now.Format("2006-01-02 15:04:05.000"))
    fmt.Println(now.Format("2006-01-02 15:04:05.999"))
}
输出结果是
2020-06-09 16:47:19
2020-6-9 16:47:19
2020/06/09 16:47:19
16:47:19 2020/06/09
2020/06/09
2020-06-09 16:47:19.575
2020-06-09 16:47:19.575

定时器
使用time.Tick(时间间隔)来设置定时器。

package main

import (
    "fmt"
    "time"
)

func main(){
    //定义一个1秒间隔的定时器
    ticker := time.Tick(time.Second)
    for i := range ticker {
        //每秒都会执行的任务
        func(){
            fmt.Println(i)
        }()
    }
}

时间间隔
Duration类型代表两个时间点之间经过的时间,以纳秒为单位。可表示的最长时间段大约为290年。定义的时间间隔常量如下:

const (
    Nanosecond  Duration = 1
    Microsecond          = 1000 * Nanosecond
    Millisecond          = 1000 * Microsecond
    Second               = 1000 * Millisecond
    Minute               = 60 * Second
    Hour                 = 60 * Minute
)

time小练习

package main

import (
    "fmt"
    "time"
)

func formatTime(t time.Time) string {
    return t.Format("2006/01/02 15:04:05")
}

//计算一段代码执行微秒数
func calTime() {
    //方法一:
    start := time.Now().UnixNano() / 1000
    time.Sleep(time.Millisecond * 30)
    end := time.Now().UnixNano() / 1000
    fmt.Printf("耗费了%d微秒\n", end - start)

    //方法二:
    start2 := time.Now()
    time.Sleep(time.Millisecond * 30)
    fmt.Printf("耗费了%d微秒\n", time.Since(start2) / 1000)
}

func main(){
    now := time.Now()
    newTime := formatTime(now)
    fmt.Println(newTime)

    calTime()
}
输出结果是
2020/06/09 19:34:05
耗费了30020微秒
耗费了30040微秒
上一篇 下一篇

猜你喜欢

热点阅读