Golang Go语言新手求教一个类型断言的问题

发布于 1周前 作者 yibo5220 来自 Go语言

Golang Go语言新手求教一个类型断言的问题
我理解 go 断言返回的应该是对应类型的对象,比如说
package main

import (
“fmt”
)

func findType(i interface{}) {
switch x := i.(type) {
case int:
fmt.Println(x, “is int”)
case string:
fmt.Println(x, “is string”)
case nil:
fmt.Println(x, “is nil”)
default:
fmt.Println(x, “not type matched”)
}
}

func main() {
findType(10) // int
findType(“hello”) // string

var k interface{} // nil
findType(k)

findType(10.23) //float64
}

这里 x 应该是具体类型的值 10, "hello"之类的,为什么可以和 int string 这些 case 匹配呢?


更多关于Golang Go语言新手求教一个类型断言的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

5 回复

我去还能这么写…我以前都是判断好了再转一次

更多关于Golang Go语言新手求教一个类型断言的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


val.(type)是类型断言的特殊语法,和 val.(int)什么的不一样

.(type)会返回 interface{}的类型,然后使用 switch 匹配类型的 case,这里的 case 甚至可以是接口类型,算是 go 的一个专用语法了

简单说,可以认为 i.(type) 返回了 i 的值和类型,switch 比较用的是类型,值是方便程序员用的。

当然,我很乐意帮助你理解Go语言中的类型断言。

类型断言是Go语言中用于检测接口值是否包含特定类型的一种方法。当你有一个接口类型的变量,但不确定它具体指向的是哪个具体类型的值时,就可以使用类型断言来检查并获取这个值。

类型断言的基本语法如下:

value, ok := x.(T)

其中,x是一个接口类型的变量,T是一个具体类型(比如intstring或者某个自定义的结构体类型)。这个语句会尝试将x断言为T类型。如果成功,value会是x转换为T类型后的值,ok会是true。如果失败,value会是T类型的零值,ok会是false

这里有一个简单的例子:

var i interface{} = "hello"

s, ok := i.(string)
if ok {
    fmt.Println(s) // 输出: hello
} else {
    fmt.Println("类型断言失败")
}

在这个例子中,我们有一个接口变量i,它存储了一个字符串值。通过类型断言,我们成功地将它转换回字符串类型并打印出来。

希望这能帮助你理解Go语言中的类型断言。如果你有任何其他问题或需要进一步的解释,请随时提问!

回到顶部