golang,使用structs作为函数的参数

时间:2017-02-01 19:27:08

标签: go

你能否就这个问题提出建议。 我刚刚开始学习golang并且已经因此而陷入困境。

例如:

package main

import (
    "fmt"
)
type X struct{
    x string
}
type Y struct{
    y string
}

func main() {
    var x []X
    var y []Y

    f(x)
    f(y)
}

func f(value interface{}){
    if(typeof(value) == "[]X"){
        fmt.Println("this is X")
    }
    if(typeof(value) == "[]Y"){
        fmt.Println("this is Y")
    }
}

expected output: this is X
                 this is Y

value interface{}类型错误。如何将不同的结构放入一个函数中,然后动态定义其类型。

这样的事情可能吗? 感谢。

1 个答案:

答案 0 :(得分:4)

如果您知道确切的可能类型,则可以使用type switch。否则,您可以使用reflect包。

以下是演示类型切换方法的代码:

package main

import (
    "fmt"
)

type X struct {
    x string
}
type Y struct {
    y string
}

func main() {
    var x = []X{{"xx"}}
    var y = []Y{{"yy"}}

    f(x)
    f(y)
}

func f(value interface{}) {
    switch value := value.(type) {
    case []X:
        fmt.Println("This is X", value)
    case []Y:
        fmt.Println("This is Y", value)
    default:
        fmt.Println("This is YoYo")
    }
}

播放链接:here