Anonymous - 匿名的妙用
匿名结构体 - 数据快读
在读取某一些临时数据,然后快速打印的时候,使用匿名函数是相当方便的
func ReadData(){
jsonData := []byte(`[
{"Name":"ZhaoJun","Sex":"Male"},
{"Name":"Xishi","Sex":"female"}
]`)
var persons []struct {
Name string
Sex string
}
err := json.Unmarshal(jsonData,&persons)
if err != nil {
fmt.Println(err)
}
for _,p := range persons {
fmt.Printf("%#v\n",p)
}
}
struct { Name string; Sex string }{Name:"ZhaoJun", Sex:"Male"}
struct { Name string; Sex string }{Name:"Xishi", Sex:"female"}
匿名接口 - 类型判断
接口一样是可以做匿名的类型判断的
在下面的例子中,并没有声明某一个接口,但是却成功的判断出 昭君(zhaojun)是会唱歌( Sing) 的!
package main
type zhaojun struct {}
func (zj zhaojun) Sing(){
fmt.Printf("%s\n","ZhaoJun sing very well")
}
func (zj zhaojun) Dance(){
fmt.Printf("%s\n","ZhaoJun Dance Sucks!")
}
func InterfaceAssertion (x interface{}){
if _,ok := x.(interface{
Sing()
Dance()
});!ok {
fmt.Printf("x can't sing and dance")
} else {
fmt.Printf("welcome for singer!\n")
x.(interface{Sing()}).Sing()
}
}
func main() {
zj := zhaojun{}
InterfaceAssertion(zj)
}
结果如下,昭君果然唱的不错!
welcome for singer!
ZhaoJun sing very well