golang Golang Type断言

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang Golang Type断言相关的知识,希望对你有一定的参考价值。

package main

import "fmt"

func main() {
	var i interface{} = "hello"

	s := i.(string)
	fmt.Println(s)

	s, ok := i.(string)
	fmt.Println(s, ok)

	f, ok := i.(float64)
	fmt.Println(f, ok)

	f = i.(float64) // panic
	fmt.Println(f)
}

golang 基础知识3

断言: 参考 https://studygolang.com/articles/3314

var.(T)类型断言失败时会返回T类型的“0值”,而不是变量原始值。 var是要判断的变量,T类型,例如:sss.(string),T是type最好用的是interface或者一个strcut

其中var为interface{}类型 T是要断言的类型。

简单的string可以不使用这个

1)直接断言使用

var a interface{}

a = "xxxx"

fmt.Println("Where are you,Jonny?", a.(string))

但是如果断言失败一般会导致panic的发生。所以为了防止panic的发生,我们需要在断言前进行一定的判断

value, ok := a.(string)     //value在正常值true/false, 如果没错误 ok是没有值的,如果有panic则ok是有值的

if value, ok := a.(string) ,ok {

  fmt.Println(value, ok)   //xxxx,true

}

if value, ok := a.(string) ,ok {

  fmt.Println(value, ok)   

} else {

    fmt.Println(value, ok)   //<nil>, false  如果ok为false则ok为false

}

 

以上是关于golang Golang Type断言的主要内容,如果未能解决你的问题,请参考以下文章

golang 类型断言使用 reflect.Typeof()

Golang type assertion 类型断言

Golang type assertion 类型断言

Golang type assertion 类型断言

golang 接口interface{}断言switch type

golang type 和断言 interface{}转换