当前位置: 首页 > 面试题库 >

如何确定interface {}值的“真实”类型?

王宜
2023-03-14
问题内容

我没有找到使用interface{}类型的好资源。例如

package main

import "fmt"

func weirdFunc(i int) interface{} {
    if i == 0 {
        return "zero"
    }
    return i
}
func main() {
    var i = 5
    var w = weirdFunc(5)

    // this example works!
    if tmp, ok := w.(int); ok {
        i += tmp
    }

    fmt.Println("i =", i)
}

您知道使用Go’s的很好的介绍interface{}吗?

具体问题:

  • 如何获得w的“真实”类型?
  • 有什么办法来获取类型的字符串表示形式吗?
  • 有什么方法可以使用类型的字符串表示形式来转换值?

问题答案:

您的示例确实有用。这是一个简化的版本。

package main

import "fmt"

func weird(i int) interface{} {
    if i < 0 {
        return "negative"
    }
    return i
}

func main() {
    var i = 42
    if w, ok := weird(7).(int); ok {
        i += w
    }
    if w, ok := weird(-100).(int); ok {
        i += w
    }
    fmt.Println("i =", i)
}

Output:
i = 49

它使用类型断言。



 类似资料:
  • 一个原则:尽量精度高,但不能溢出。 若变量的最大值为 |max|,2^{n-1}< |max| < 2^{n}。我们 dsp 是 32bit ,因此最大的Q = 31 - n。 要求对输入的数据集的范围做到心中有数。

  • 一个原则:尽量精度高,但不能溢出。 若变量的最大值为 |max|,2^{n-1}< |max| < 2^{n}。我们 dsp 是 32bit ,因此最大的Q = 31 - n。 要求对输入的数据集的范围做到心中有数。

  • 问题内容: 我正在创建一个通用类,并且需要使用一种方法来了解当前使用的通用类型的Class。原因是我调用的方法之一期望将此作为参数。 例: 显然,上面的示例不起作用,并导致以下错误:类型参数T的非法类文字。 我的问题是:有人知道这方面有很好的选择或解决方法吗? 问题答案: 仍然存在相同的问题:常规信息在运行时被删除,无法恢复。一种解决方法是在静态方法的参数中传递T类: 很难看,但是可以用。

  • 问题内容: 我如何查看变量的类型(无符号32位,带符号16位等)? 问题答案: 与的类型不同,这似乎是你的问题。 尝试这个: 不过,在Python 3.0中int和long之间的区别消失了。

  • 问题内容: 如果class 和class 扩展了class 并且我有一个对象类型或,我如何确定它是实例的哪种类型? 问题答案:

  • 问题内容: 我正在尝试使用 为用nodejs编写的应用程序安装我的所有依赖项。我的操作系统是Ubuntu 13.04 但是,我不断收到此警告: 有人遇到过这个警告吗?是否可以在本地验证和存储指纹?因此,当我再次输入sudo npm install时,无需再次进行身份验证。 目前,我无法输入任何内容,甚至无法输入“是”。我的终端卡住了,我必须按ctrl + c来终止。 问题答案: 除非您实际上不关心