从界面更改为所需类型

标签 go types type-assertion

我有这个方法,我收到一个 int64参数。该参数在某些区域使用,然后应该传递给另一个需要不同类型的方法(来自外部库):type AcctInterimInterval uint32

我尝试将其转换为 uint32但脚本提示它:invalid type assertion: ... (non-interface type int on left) .

我还尝试将其转换为 AcctInterimInterval但这次出现了不同的错误:interface conversion: interface {} is int, not main.AcctInterimInterval

到目前为止,这是我的测试代码:

package main

import (
    "fmt"
)

//  defined in some other lib
type AcctInterimInterval uint32

//  defined in some other lib
func test(value AcctInterimInterval){
    fmt.Println(value)
}

func main() {
    //  int received externally
    interval := 60

    var acctInterval interface{} = interval

    test(acctInterval.(AcctInterimInterval))
}

相关 Playground :https://play.golang.org/p/tTW5J2FIAy3

最佳答案

您的 acctInterval 变量包装了一个 int 值,因此您只能 type-assert来自它的 int:

acctInterval.(int)

然后你可以convertAcctInterimInterval:

test(AcctInterimInterval(acctInterval.(int)))

Go Playground 上试试.

关于从界面更改为所需类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55728678/

相关文章:

regex - 用于验证 URL 中的 '/' 的正则表达式

security - 调用“unsafe.Pointer(&x)”不安全吗?

go - 如何在不更改golang中原始值的情况下修改对象的值副本?

function - Haskell 和一般类型

go - map.LoadOrStore 返回的地址值是否与嵌套 map 的输入相同?

heroku - 如何使用子目录中的主包将 Go 应用程序部署到 Heroku?

go - 使用 struct 进行 JSON 解析

sql - 如何添加时间戳和整数类型的两列

typescript - 将使用 Typescript 中的 --strictNullChecks 从 DB 或 API 接收异步数据的变量类型?

casting - 类型断言/类型切换是否性能不佳/在 Go 中很慢?