加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Golang interface{} 作为函数参数和函数返回值例子

发布时间:2020-12-16 18:08:14 所属栏目:大数据 来源:网络整理
导读: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
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.52php.cn/article/p-beylukyv-boy.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读