Go 其七 空接口与断言
空接口与断言
- 空接口可以表示任何类型
- 通过断言来将空接口转换为定制类型
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]
有些泛型的味道了~~

浙公网安备 33010602011771号