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

 更新时间:2022年04月02日 09:22:27   作者:西京刀客  
这篇文章主要介绍了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语言数字与时间相乘内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Golang中的通道机制与应用

    详解Golang中的通道机制与应用

    这篇文章主要来和大家一起深入探讨了Go语言中通道(Channel)的各个方面,文章详细解析了通道的类型、操作方法以及垃圾回收机制,有需要的可以了解下
    2023-10-10
  • go micro集成链路跟踪的方法和中间件原理解析

    go micro集成链路跟踪的方法和中间件原理解析

    这篇文章主要介绍了go-micro集成链路跟踪的方法和中间件原理,关于Http或者说是Restful服务的链路跟踪,go-micro的httpClient支持CallWrapper,可以用WrapCall来添加链路跟踪的CallWrapper,本文给大家介绍的非常详细,需要的朋友参考下吧
    2022-05-05
  • go语言中struct标签详解

    go语言中struct标签详解

    这篇文章主要给大家介绍了关于go语言中struct标签的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者使用go语言具有一定的参考学习价值,需要的朋友可以参考下
    2023-07-07
  • go语言定时器Timer及Ticker的功能使用示例详解

    go语言定时器Timer及Ticker的功能使用示例详解

    这篇文章主要为大家介绍了go语言定时器的功能使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • VsCode下开发Go语言的环境配置超详细图文详解

    VsCode下开发Go语言的环境配置超详细图文详解

    vscode是一款跨平台、轻量级、插件多的开源IDE,在vscode不仅可以配置C/C++、Python、R、Ruby等语言的环境,还可以配置Go语言的环境,下面这篇文章主要给大家介绍了关于VsCode下开发Go语言的环境配置,需要的朋友可以参考下
    2024-03-03
  • Golang命令行进行debug调试操作

    Golang命令行进行debug调试操作

    今天小编就为大家分享一篇关于,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • Go语言:打造优雅数据库单元测试的实战指南

    Go语言:打造优雅数据库单元测试的实战指南

    Go语言数据库单元测试入门:聚焦高效、可靠的数据库代码验证!想要确保您的Go应用数据层坚如磐石吗?本指南将手把手教您如何利用Go进行数据库单元测试,轻松揪出隐藏的bug,打造无懈可击的数据处理逻辑,一起来探索吧!
    2024-01-01
  • Go语言七篇入门教程六网络编程

    Go语言七篇入门教程六网络编程

    这篇文章主要为大家介绍了Go语言的网络编程,其中包含了Socket编程,Http编程以及RPC编程,本篇文章是Go语言七篇入门系列文章,有需要的朋友可以借鉴下
    2021-11-11
  • golang 监听服务的信号,实现平滑启动,linux信号说明详解

    golang 监听服务的信号,实现平滑启动,linux信号说明详解

    这篇文章主要介绍了golang 监听服务的信号,实现平滑启动,linux信号说明详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • go-micro开发RPC服务以及运行原理介绍

    go-micro开发RPC服务以及运行原理介绍

    这篇文章介绍了go-micro开发RPC服务的方法及其运行原理,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07

最新评论