2017-02-01 2 views
0

не могли бы вы посоветовать на вопрос. Я только начал изучать голанг и уже задохнулся от этой ситуации.golang, используйте structs как аргумент в функцию

Например:

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

У вас есть переменные и функция с тем же именем. Что вы пытаетесь сделать? – JimB

+0

Обновлено. Надеюсь, теперь ясно. – touchman

+0

Вы ищете тип утверждения или переключатель типа? Возможный дубликат: https://stackoverflow.com/questions/6996704/how-to-check-variable-type-at-runtime-in-go-language – JimB

ответ

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

+0

спасибо, что помогает – touchman

Смежные вопросы