好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Golang中的time.Duration類型用法說明

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

熱門標簽:上海極信防封電銷卡價格 湛江crm外呼系統排名 宿遷便宜外呼系統代理商 鄭州智能語音電銷機器人價格 地圖標注免費定制店 寧波語音外呼系統公司 仙桃400電話辦理 重慶慶云企業400電話到哪申請 不封卡外呼系統

在 Time 包中,定義有一個名為 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)
 }
}

以上代碼運行后的輸出為:

Time Elapsed : Wait[500] Duration[10724798]

也就是說,定義的500毫秒已經用完了?當我們再次查看Duration類型的定義,可以發現Duration類型匯總基本單位時間是納秒(Nanosecond),所以講一個表示10毫秒的Durantion類型對象轉換為int64類型時,實際上得到的是10,000,000。因此,直接轉換是不行的,需要一個不同的策略來使用和轉換Duration類型。

首先,我我們可以基于Duration中定義的常量,創建下面這樣的一個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)
}

在上面代碼中,我們創建了3個Duration類型的變量,通過使用時間常數,創建正確的持續時間值,然后使用標準庫函數Printf和%v操作符,得到下面的輸出結果:

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

Printf函數知道如何本地化顯示一個 Duration 類型,它基于 Duration 類型中的每一個值,選擇合適的格式進行時間的顯示。

實際上,Duration類型擁有一些邊界的類型轉換函數,他們能將Duration類型轉化為Go預研的內建類型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)
}

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

Seconds [12.500]

Minutes [2.00]

當我們需要轉換毫秒值,但包里面單單沒有提供毫秒值的裝換呢? Go 語言的設計者希望我有更多的選擇,而不只是將毫秒值轉換成某種單獨的內建類型。下面的代碼中,我將毫秒值轉化為了 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]

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

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]

補充:golang time.Duration 自定義變量報錯解決

對于time.Duration類型,如果采用 time.Duration類型 * int變量 會報錯,而直接和數字相乘則不會出現;

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

錯誤:

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

原因:因為類型不匹配,time.Duration類型 不能直接和 int類型相乘,需要先將變量轉換為time.Duration

解決方式:

time.Duration(int變量))

代碼如下:

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

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • golang 定時任務方面time.Sleep和time.Tick的優劣對比分析
  • 解決Golang time.Parse和time.Format的時區問題
  • 解決golang時間字符串轉time.Time的坑
  • golang的時區和神奇的time.Parse的使用方法
  • 對Golang中的runtime.Caller使用說明
  • golang time包做時間轉換操作
  • golang xorm及time.Time自定義解決json日期格式的問題
  • golang time常用方法詳解

標簽:青海 海南 西雙版納 安康 物業服務 儋州 遼寧 電子產品

巨人網絡通訊聲明:本文標題《Golang中的time.Duration類型用法說明》,本文關鍵詞  Golang,中的,time.Duration,類型,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Golang中的time.Duration類型用法說明》相關的同類信息!
  • 本頁收集關于Golang中的time.Duration類型用法說明的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 欧美日韩免费做爰大片| 熟妇熟女一区二区三区| 91w乳液78w78w乳液| 被强行玩弄的美人H| 《彼女の调教》在线观看| 看黄色影片| 欧美vid| 国产美女黄网站免费视频| 99热久久这里只精品国产WWw| 亚洲二区电影| 学生的妈妈5中韩双字多鱼3| 日本成人福利视频| 5177.tv草草影院| 农村寡妇一级毛片免费看视频| 狠狠色成人综合首页| 韩国三级HD中字2020| 男人tv天堂精品一区二区| 最新高价众筹嫩模艾栗栗| 我的魅惑小姨子| 色噜噜视频影院| 久久精品久久久久| 日本??裸体??胸| 久久996re热这里有精品| 成人亚洲网站www在线观看| 被闺蜜男朋友c哭高H1v1| 爆?喷水?洗澡?网站| 欧美国产中文| 久久香蕉国产线看观看乱码| 欧美亚洲国产激情一区二区| 中文字幕精品无码亚洲字幕一区| 18videosex 欧美成人| 岛国搬运工www啪欧美| 电影潘金莲在线播放| 色天堂下载| 91精品久久久久久综合五月天| 日日擼夜夜擼狠狠擼88| 久久666| 绿色视频免费观看免费3| 少妇又紧又深又湿又爽视频| 人妻温泉旅行あらくれ女主| bdsm虐乳|