解决Go语言time包数字与时间相乘的问题

背景说明:

10 * time.Second //正常数字相乘没错

但是

package main
import "time"
func main(){
    connectTimeout := 10
    time.Sleep(time.Second*connectTimeout)
}

这样使用会报错

int and time.Duration are different types. You need to convert the int to a time.Duration

原因分析:

原因:因为类型不匹配,time.Duration类型 不能直接和 int类型相乘,需要先将变量转换为time.Duration

解决方式:time.Duration(int变量))

解决方法:

要将整数个单位转换为持续时间

seconds := 10
	ctx, cancel := context.WithTimeout(context.Background(), time.Duration(seconds) * time.Second)
	//ctx, cancel := context.WithCancel(context.Background())
	defer cancel()
// Common durations. There is no definition for units of Day or larger
// to avoid confusion across daylight savings time zone transitions.
//
// To count the number of units in a Duration, divide:
//	second := time.Second
//	fmt.Print(int64(second/time.Millisecond)) // prints 1000
//
// To convert an integer number of units to a Duration, multiply:
//	seconds := 10
//	fmt.Print(time.Duration(seconds)*time.Second) // prints 10s

参考

Golang:如何将int转换为time.duration?
参考URL: https://ask.csdn.net/questions/1037457
golang time.Duration 自定义变量报错解决
参考文末介绍。

下面看下: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))

到此这篇关于解决Go语言time包数字与时间相乘的问题的文章就介绍到这了,更多相关Go语言数字与时间相乘内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • golang time包的用法详解

    在我们编程过程中,经常会用到与时间相关的各种务需求,下面来介绍 golang 中有关时间的一些基本用法,我们从 time 的几种 type 来开始介绍. 时间可分为时间点与时间段,golang 也不例外,提供了以下两种基础类型 - 时间点(Time) - 时间段(Duration) 除此之外 golang 也提供了以下类型,做一些特定的业务 - 时区(Location) - Ticker - Timer(定时器) 我们将按以上顺序来介绍 time 包的使用. 时间点(Time) 我们使用的所有与

  • golang time包做时间转换操作

    Time类型 Now方法表示现在时间. func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time 返回现在的时间, func (t Time) Unix() int64将时间转换为unix时间戳,因为duration的限制,所以应该只能计算从1970年开始的250年左右 func Unix(sec int64, nsec int64) Time将时间戳转化为Time对象,看上去相似,只不

  • golang 使用time包获取时间戳与日期格式化操作

    Time包定义的类型 Time: 时间类型, 包含了秒和纳秒以及 Location Month: type Month int 月份. 定义了十二个月的常量 const ( January Month = 1 + iota February March April May June July August September October November December ) Weekday 类型: type Weekday int 周 定义了一周的七天 const ( Sunday Wee

  • golang的time包:秒、毫秒、纳秒时间戳输出方式

    菜鸟的时候只知道时间戳有10位.13位.还有好长位数的. 入坑久了才明白 10位数的时间戳是以 秒 为单位: 13位数的时间戳是以 毫秒 为单位: 19位数的时间戳是以 纳秒 为单位: golang中可以这样写: package main import ( "time" "fmt" ) func main() { fmt.Printf("时间戳(秒):%v;\n", time.Now().Unix()) fmt.Printf("时间戳(

  • 解决Go语言time包数字与时间相乘的问题

    背景说明: 10 * time.Second //正常数字相乘没错 但是 package main import "time" func main(){ connectTimeout := 10 time.Sleep(time.Second*connectTimeout) } 这样使用会报错 int and time.Duration are different types. You need to convert the int to a time.Duration 原因分析: 原因

  • C语言中时间戳转换成时间字符串的方法

    在PE格式里有个字段是文件的创建时间戳,我想把转成字符串,这样看的更直观. TCHAR buffer[50] = {0}; struct tm Tm = {0}; time_t time = (time_t)NtHeader->FileHeader.TimeDateStamp;//时间戳 gmtime_s(&Tm, &time); printf(buffer, TEXT("%d年%d月%d日 %d:%d:%d"), Tm.tm_year+1900, Tm.tm_m

  • C语言 strftime 格式化显示日期时间的实现

    C/C++程序中需要程序显示当前时间,可以使用标准函数strftime. 函数原型:size_t strftime (char* ptr, size_t maxsize, const char* format,const struct tm* timeptr ); 代码示例: #include <stdio.h> #include <time.h> int main () { time_t rawtime; struct tm * timeinfo; char buffer [12

  • 解决C语言数组元素循环右移的问题

    如下所示: #include<stdio.h> #define N 100 int main() { int a[N]; int i,j,k,n,m,temp=0; scanf("%d %d",&n,&m); i=0; while(i<n) { scanf("%d",&a[i]); i++; } for(j=0;j<m;j++) //移动次数 { temp=a[n-1]; //保存最后一位数 for(k=n-1;k&g

  • 易语言的输入字类型详解

    在程序中书写输入字时,可以使用一个半角符号来引导该输入字,以指定其类型.各输入字的类型引导符号为: 首拼及全拼输入字: 分号(";") 如: ;qz(1.23) 或 ;quzheng(1.23) 双拼输入字: 冒号(":") 如: :quvg(1.23) 英文输入字: 单引号(" '") 如: 'int(1.23) 系统具有一个当前默认输入法状态,如果某输入字前没有加上类型引导符号,则默认是属于该输入法的输入字.系统安装完毕后,当前默认输入法为&

  • 解决C语言中使用scanf连续输入两个字符类型的问题

    昨天用C编程,遇到一个关于scanf的细节问题,假如运行如下程序: #include<stdio.h> int main() { char ch1,ch2; printf("Input for ch1:/n"); scanf("%c",&ch1); printf("ch1=%c/n",ch1); printf("Input for ch2:/n"); scanf("%c",&ch

  • 解决C语言输入单个字符屏蔽回车符的问题

    C语言的scanf()函数在接收输入单个字符时会把上一次输入的回车符号当做这次输入的字符,造成无法正确的输入字符数据.这恐怕是初学C的童鞋门遇到的最头疼的问题了. 今天给大家提供四种解决方法供借鉴. 1.在scanf()中使用'\n'屏蔽回车符号. scanf("%d\n",&n); //使用'\n'过滤回车 scanf("%c",&c); 2.在scanf()格式串最前面添加空格,屏蔽回车字符 scanf("%d",&n

  • 详解R语言中生存分析模型与时间依赖性ROC曲线可视化

    R语言简介 R是用于统计分析.绘图的语言和操作环境.R是属于GNU系统的一个自由.免费.源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具. 人们通常使用接收者操作特征曲线(ROC)进行二元结果逻辑回归.但是,流行病学研究中感兴趣的结果通常是事件发生时间.使用随时间变化的时间依赖性ROC可以更全面地描述这种情况下的预测模型. 时间依赖性ROC定义 令 Mi为用于死亡率预测的基线(时间0)标量标记. 当随时间推移观察到结果时,其预测性能取决于评估时间 t.直观地说,在零时间测量的标记值应该

  • C语言实现井字棋游戏

    本文实例为大家分享了C语言实现井字棋游戏的具体代码,供大家参考,具体内容如下 首先,我们需要一个大体的思路,先进行宏观规划,再对细节进行实现. 比如: 1.首先需要一个菜单面板作以修饰,在这个面板上,玩家可以选择进入游戏或者退出游戏. 2.需要一个游戏程序,这个是核心. 差不多就是这两个了,我们可以先把这个写下来,这样也可以方便后面使用,像这样: void Game(); int Menu();//这里Menu之所以用int,是为了用返回值来确定是否退出游戏,并非唯一,也非最佳,读者自己尝试 为

  • C语言实现井字棋(三子棋)

    本文实例为大家分享了C语言实现井字棋的具体代码,供大家参考,具体内容如下 一.实现思路 1.初始化数组 三子棋是九宫格的格式,所以用二维数组接收数据.用'O'代表电脑下的子,'X'代表玩家下的子.未下子的时候初始化 ' '(space).则二维数组为"char"类型,大小为char board[3][3]. 2.打印棋盘 打印出井字的棋盘,同时为了将数据显示在每格的中间,用空格隔开(" %c |")的格式设置棋盘"|"用来形成竖,接着打印&quo

随机推荐