pyList

Golang里的类型断言及注意问题

go语言里的断言功能是对 interface 类型的识别,可以对内置类型及自定义类型作识别。

Golang里的类型断言及注意问题

参见下面的代码:

package main

import (
	"fmt"
)

type (
	mb  = []byte
	ms  = string
	mb2 []byte
)

func (b mb2) String() string {
	return string(b)
}

func main() {
	var ss ms
	ss = "hikj"
	itfs := []interface{}{
		mb{97, 98, 99},
		"def",
		[]byte{103, 104, 105},
		ss,
		mb2{97, 98, 99},
	}
	for _, v := range itfs {
		switch vs := v.(type) {
		case string:
			fmt.Println("v is string", vs)
		case []byte:
			fmt.Println("v is []byte", string(vs))
		case mb2:
			fmt.Println("v is mb2", vs.String())
		}
	}
}

运行输出:

v is []byte abc
v is string def
v is []byte ghi
v is string hikj
v is mb2 abc

注意的问题

使用类型别名时是相同的类型

	mb  = []byte
	ms  = string

使用类型再定义时是不同的类型

	mb2 []byte

如果使用别名就添加不了自定义方法,如果要使用类型再定义,则在断言里需要指定识别该类型。

本文标签: Golang 断言 类型 注意 问题
本文网址: https://pylist.com/t/1581563768 (转载注明出处)
如果你有任何建议或疑问可以在下面 留言
发表第一条评论!
验证码图片
相关推荐