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{"zhanghan","man"}).(*person)
    fmt.Println(p2)

    fmt.Println(p1.Name)

    fmt.Println(p2.Name)
    fmt.Println(p2.Sex)
}

运行结果如下:
item name:apple
person name:zhanghan sex:man
apple
zhanghan
man

例子来源:http://www.jb51.cc/article/p-beylukyv-boy.html

猜你在找的Go相关文章