go基础之类型断言

Posted zzxiaoma

tags:

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

点前面是接口,后面是具体的类型,如果接口可以转为后面的类型,就转为后面的类型并返回

func main() 
var w io.Writer = os.Stdout
f, ok := w.(*os.File) // success: ok, f == os.Stdout
if ok
fmt.Println(f)

b, ok := w.(*bytes.Buffer) // failure: !ok, b == nil
if ok
fmt.Println(b)

能不能转还需要看具体的值,虽然w是写接口,但是*os.File是可以读写的,所以可以转为io.ReadWriter

func main() 
var w io.Writer
w = os.Stdout
rw := w.(io.ReadWriter)
fmt.Println(rw)

可以根据接口类型判断来执行不同的操作

package fmt

func formatOneValue(x interface) string
if err, ok := x.(error); ok
return err.Error()

if str, ok := x.(Stringer); ok
return str.String()

// ...all other types...

以上是关于go基础之类型断言的主要内容,如果未能解决你的问题,请参考以下文章

go语言基础包,接口

go语言接口断言

Go 类型断言

类型断言/类型切换是不是性能不佳/在 Go 中运行缓慢?

Go类型断言

Go语言的断言返回值和类型转换的区别