转载:http://blog.csdn.net/chdhust/article/details/51436882


面给出一个例子:

[python]  view plain
  1. package main  
  2.   
  3. import (  
  4.     "errors"  
  5.     "fmt"  
  6. )  
  7.   
  8. type item struct {  
  9.     Name string  
  10. }  
  11.   
  12. func (i item) String() string {  
  13.     return fmt.Sprintf("item name: %v", i.Name)  
  14. }  
  15.   
  16. type person struct {  
  17.     Name string  
  18.     Sex  string  
  19. }  
  20.   
  21. func (p person) String() string {  
  22.     return fmt.Sprintf("person name: %v sex: %v", p.Name, p.Sex)  
  23. }  
  24.   
  25. func Parse(i interface{}) interface{} {  
  26.     switch i.(type) {  
  27.     case string:  
  28.         return &item{  
  29.             Name: i.(string),  
  30.         }  
  31.     case []string:  
  32.         data := i.([]string)  
  33.         length := len(data)  
  34.         if length == 2 {  
  35.             return &person{  
  36.                 Name: data[0],  
  37.                 Sex:  data[1],  
  38.             }  
  39.         } else {  
  40.             return nil  
  41.         }  
  42.     default:  
  43.         panic(errors.New("type match miss"))  
  44.     }  
  45.     return nil  
  46. }  
  47.   
  48. func main() {  
  49.     p1 := Parse("Apple").(*item)  
  50.     fmt.Println(p1)  
  51.     p2 := Parse([]string{"zhangsan", "man"}).(*person)  
  52.     fmt.Println(p2)  
  53. }  

输出结果:
[python]  view plain
  1. item name: Apple  
  2. person name: zhangsan sex: man  
  3. 成功: 进程退出代码 0.