最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang中的time.Duration類型用法說明

 更新時(shí)間:2020年12月21日 09:55:57   作者:ALA耀絳  
這篇文章主要介紹了Golang中的time.Duration類型用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

在 Time 包中,定義有一個(gè)名為 Duration 的類型和一些輔助的常量:

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

那么我們看下面一段代碼:

func Test() {
 var waitFiveHundredMillisections int64 = 500
 
 startingTime := time.Now().UTC()
 time.Sleep(10 * time.Millisecond)
 endingTime := time.Now().UTC()
 
 var duration time.Duration = endingTime.Sub(startingTime)
 var durationAsInt64 = int64(duration)
 
 if durationAsInt64 >= waitFiveHundredMillisections {
 fmt.Printf("Time Elapsed : Wait[%d] Duration[%d]\n", waitFiveHundredMillisections, durationAsInt64)
 } else {
 fmt.Printf("Time DID NOT Elapsed : Wait[%d] Duration[%d]\n", waitFiveHundredMillisections, durationAsInt64)
 }
}

以上代碼運(yùn)行后的輸出為:

Time Elapsed : Wait[500] Duration[10724798]

也就是說,定義的500毫秒已經(jīng)用完了?當(dāng)我們?cè)俅尾榭碊uration類型的定義,可以發(fā)現(xiàn)Duration類型匯總基本單位時(shí)間是納秒(Nanosecond),所以講一個(gè)表示10毫秒的Durantion類型對(duì)象轉(zhuǎn)換為int64類型時(shí),實(shí)際上得到的是10,000,000。因此,直接轉(zhuǎn)換是不行的,需要一個(gè)不同的策略來使用和轉(zhuǎn)換Duration類型。

首先,我我們可以基于Duration中定義的常量,創(chuàng)建下面這樣的一個(gè)Duration變量:

func Test() {
 var duration_Milliseconds time.Duration = 500 * time.Millisecond
 var duration_Seconds time.Duration = (1250 * 10) * time.Millisecond
 var duration_Minute time.Duration = 2 * time.Minute
 
 fmt.Printf("Milli [%v]\nSeconds [%v]\nMinute [%v]\n", duration_Milliseconds, duration_Seconds, duration_Minute)
}

在上面代碼中,我們創(chuàng)建了3個(gè)Duration類型的變量,通過使用時(shí)間常數(shù),創(chuàng)建正確的持續(xù)時(shí)間值,然后使用標(biāo)準(zhǔn)庫(kù)函數(shù)Printf和%v操作符,得到下面的輸出結(jié)果:

Milli [500ms]
Seconds [12.5s]
Minute [2m0s]

Printf函數(shù)知道如何本地化顯示一個(gè) Duration 類型,它基于 Duration 類型中的每一個(gè)值,選擇合適的格式進(jìn)行時(shí)間的顯示。

實(shí)際上,Duration類型擁有一些邊界的類型轉(zhuǎn)換函數(shù),他們能將Duration類型轉(zhuǎn)化為Go預(yù)研的內(nèi)建類型int64或float64,例如:

func Test() {
 var duration_Seconds time.Duration = (1250 * 10) * time.Millisecond
 var duration_Minute time.Duration = 2 * time.Minute
 
 var float64_Seconds float64 = duration_Seconds.Seconds()
 var float64_Minutes float64 = duration_Minute.Minutes()
 
 fmt.Printf("Seconds [%.3f]\nMinutes [%.2f]\n", float64_Seconds, float64_Minutes)
}

需要注意的是,在時(shí)間轉(zhuǎn)換函數(shù)中,并沒有轉(zhuǎn)換毫秒值的函數(shù),上述代碼只使用 Seconds 和 Minutes 函數(shù),得到了如下輸出:

Seconds [12.500]

Minutes [2.00]

當(dāng)我們需要轉(zhuǎn)換毫秒值,但包里面單單沒有提供毫秒值的裝換呢? Go 語(yǔ)言的設(shè)計(jì)者希望我有更多的選擇,而不只是將毫秒值轉(zhuǎn)換成某種單獨(dú)的內(nèi)建類型。下面的代碼中,我將毫秒值轉(zhuǎn)化為了 int64 類型和 float64 類型:

func Test() {
 var duration_Milliseconds time.Duration = 500 * time.Millisecond
 
 var castToInt64 int64 = duration_Milliseconds.Nanoseconds() / 1e6
 var castToFloat64 float64 = duration_Milliseconds.Seconds() * 1e3
 fmt.Printf("Duration [%v]\ncastToInt64 [%d]\ncastToFloat64 [%.0f]\n", duration_Milliseconds, castToInt64, castToFloat64)
}

我們將納秒值除以1e6得到了int64類型表示的毫秒值,將秒值乘以1e3,我們得到了float64類型表示的毫秒值,上面代碼的輸出如下:

Duration [500ms]
castToInt64 [500]
castToFloat64 [500]

那么,我們可以將最開始的測(cè)試代碼修改如下:

func Test() {
 var waitFiveHundredMillisections time.Duration = 500 * time.Millisecond
 
 startingTime := time.Now().UTC()
 time.Sleep(600 * time.Millisecond)
 endingTime := time.Now().UTC()
 
 var duration time.Duration = endingTime.Sub(startingTime) 
 if duration >= waitFiveHundredMillisections {
 fmt.Printf("Wait %v\nNative [%v]\nMilliseconds [%d]\nSeconds [%.3f]\n", waitFiveHundredMillisections, duration, duration.Nanoseconds()/1e6, duration.Seconds())
 }
}

得到輸出如下:

Wait 500ms
Native [601.091066ms]
Milliseconds [601]
Seconds [0.601]

補(bǔ)充:golang time.Duration 自定義變量報(bào)錯(cuò)解決

對(duì)于time.Duration類型,如果采用 time.Duration類型 * int變量 會(huì)報(bào)錯(cuò),而直接和數(shù)字相乘則不會(huì)出現(xiàn);

具體是為什么呢?怎么解決呢?

錯(cuò)誤:

Invalid operation: time.Millisecond * idcTimeOut (mismatched types Duration and int64)

原因:因?yàn)轭愋筒黄ヅ?,time.Duration類型 不能直接和 int類型相乘,需要先將變量轉(zhuǎn)換為time.Duration

解決方式:

time.Duration(int變量))

代碼如下:

 idc := getIdc()
 var idcTimeOut int64
 if _, ok := IdcTimeout[idc]; ok {
 idcTimeOut = IdcTimeout[idc]
 } else {
 idcTimeOut = AllTimeout
 }
 
 //錯(cuò)誤寫法
 time.After(time.Millisecond * idcTimeOut
 //正確寫法
 time.After(time.Millisecond * time.Duration(idcTimeOut))

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • 讓goland支持proto文件類型的實(shí)現(xiàn)

    讓goland支持proto文件類型的實(shí)現(xiàn)

    這篇文章主要介紹了讓goland支持proto文件類型的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go語(yǔ)言使用kafka-go實(shí)現(xiàn)Kafka消費(fèi)消息

    Go語(yǔ)言使用kafka-go實(shí)現(xiàn)Kafka消費(fèi)消息

    本篇文章主要介紹了使用kafka-go庫(kù)消費(fèi)Kafka消息,包含F(xiàn)etchMessage和ReadMessage的區(qū)別和適用場(chǎng)景,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-12-12
  • go語(yǔ)言睡眠排序算法實(shí)例分析

    go語(yǔ)言睡眠排序算法實(shí)例分析

    這篇文章主要介紹了go語(yǔ)言睡眠排序算法,實(shí)例分析了睡眠排序算法的原理與實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-03-03
  • Golang實(shí)現(xiàn)自己的Redis(有序集合跳表)實(shí)例探究

    Golang實(shí)現(xiàn)自己的Redis(有序集合跳表)實(shí)例探究

    這篇文章主要為大家介紹了Golang實(shí)現(xiàn)自己的Redis(有序集合跳表)實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Go語(yǔ)言調(diào)用Shell與可執(zhí)行文件的實(shí)現(xiàn)

    Go語(yǔ)言調(diào)用Shell與可執(zhí)行文件的實(shí)現(xiàn)

    這篇文章主要介紹了Go語(yǔ)言調(diào)用Shell與可執(zhí)行文件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 深入分析Golang Server源碼實(shí)現(xiàn)過程

    深入分析Golang Server源碼實(shí)現(xiàn)過程

    這篇文章深入介紹了Golang Server源碼實(shí)現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-02-02
  • idea搭建go環(huán)境實(shí)現(xiàn)go語(yǔ)言開發(fā)

    idea搭建go環(huán)境實(shí)現(xiàn)go語(yǔ)言開發(fā)

    這篇文章主要給大家介紹了關(guān)于idea搭建go環(huán)境實(shí)現(xiàn)go語(yǔ)言開發(fā)的相關(guān)資料,文中通過圖文介紹以及代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用go具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-01-01
  • golang如何設(shè)置Header Content-type

    golang如何設(shè)置Header Content-type

    這篇文章主要介紹了golang如何設(shè)置Header Content-type問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • golang實(shí)現(xiàn)實(shí)時(shí)監(jiān)聽文件并自動(dòng)切換目錄

    golang實(shí)現(xiàn)實(shí)時(shí)監(jiān)聽文件并自動(dòng)切換目錄

    這篇文章主要給大家介紹了golang實(shí)現(xiàn)實(shí)時(shí)監(jiān)聽文件,并自動(dòng)切換目錄,文中通過代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的參考價(jià)值,需要的朋友可以參考下
    2023-12-12
  • Go語(yǔ)言每天必學(xué)之switch語(yǔ)句

    Go語(yǔ)言每天必學(xué)之switch語(yǔ)句

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言每天必學(xué)之switch語(yǔ)句的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12

最新評(píng)論

芜湖市| 高安市| 白山市| 澄城县| 晋江市| 潍坊市| 商丘市| 罗山县| 遂川县| 龙门县| 长汀县| 辽宁省| 中宁县| 吴桥县| 平顺县| 和硕县| 周至县| 阳高县| 道孚县| 拜泉县| 右玉县| 塔城市| 青龙| 云梦县| 柘荣县| 阿城市| 修水县| 共和县| 南安市| 玉林市| 江西省| 炎陵县| 海城市| 城口县| 建平县| 梁平县| 乳源| 商都县| 芦山县| 高台县| 鲁山县|