首页 > 代码库 > Golang中interface{}作为函数参数和函数返回值的使用

Golang中interface{}作为函数参数和函数返回值的使用

package main

import (
    "errors"
    "fmt"
)

type item struct {
    Name string
}

func (i item) String() string {
    return fmt.Sprintf("item name: %v", i.Name)
}

type person struct {
    Name string
    Sex  string
}

func (p person) String() string {
    return fmt.Sprintf("person name: %v sex: %v", p.Name, p.Sex)
}

func Parse(i interface{}) interface{} {
    switch i.(type) {
    case string:
        return &item{
            Name: i.(string),
        }
    case []string:
        data := i.([]string)
        length := len(data)
        if length == 2 {
            return &person{
                Name: data[0],
                Sex:  data[1],
            }
        } else {
            return nil
        }
    default:
        panic(errors.New("type match miss"))
    }
    return nil
}

func main() {
    p1 := Parse("Apple").(*item)
    fmt.Println(p1)
    p2 := Parse([]string{"zhangsan", "man"}).(*person)
    fmt.Println(p2)
}

输出结果:

item name: Apple
person name: zhangsan sex: man
成功: 进程退出代码 0.