在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
空接口与断言
v, ok := p.(int) //ok=true时转换成功
Go接口最佳实践 type Reader interface { Read(p []byte) (n int, err error) } type Writer interface { Write(p []byte) (n int, err error) }
较大的接口定义,可以由多个小接口定义组合而成 type ReadWrite interface { Reader Writer }
func StoreData(reader Reader) error { ... }
相关代码如下: package empty_interface import ( "testing" "fmt" ) func DoSomething(p interface{}){ // if i,ok:=p.(int); ok{ // fmt.Println("Integer", i) // return // } // if i,ok:=p.(string); ok{ // fmt.Println("string", i) // return // } // fmt.Println("Unknow Type") //使用switch简化上面的结构 switch v:=p.(type){ case int: fmt.Println("Integer", v) case string: fmt.Println("string", v) default: fmt.Println("Unknow Type") } return } func TestEmptyInterfaceAssertion(t *testing.T){ DoSomething(10) DoSomething("15") DoSomething('z') }
执行结果为: === RUN TestEmptyInterfaceAssertion Integer 10 string 15 Unknow Type --- PASS: TestEmptyInterfaceAssertion (0.00s) PASS coverage: [no statements] ok Session13/empty_interface 0.261s coverage: [no statements] 有些泛型的味道了~~
|
请发表评论