Утверждение типа с типом из поля структуры - PullRequest
0 голосов
/ 05 августа 2020

Вот упрощенный пример того, с чем я борюсь:

type Dog struct {
    Bark bool
}

func myLogic(i interface{}) {
    newVar = i.(Dog)  // Work fines -> newVar is of type Dog if I passed such type to the function through the interface
    newVar2 = i.(Dog.Bark) // I get an error "type Dog has no method Bark"
}

Как я могу получить тип bool из поля Bark через структуру Dog здесь, чтобы использовать его для утверждения типа ??

Ответы [ 2 ]

2 голосов
/ 05 августа 2020

Вы можете попробовать вот так.

func myLogic(i interface{}) {
    newVar2 = i.(Dog)
    fmt.Println(newVar2.Bark)
}

Сначала приведите интерфейс к типу Dog. Затем вы можете получить значение Bark из типа Dog (структура)

0 голосов
/ 06 августа 2020

вы ищете reflect пакет

следующий код, например, который извлекает тип Dog.Bark и проверяет, имеет ли входная переменная тот же тип.

 package main
    
    import (
        "fmt"
        "reflect"
    )
    
    type Dog struct {
        Bark bool
    }
    
    func testtype(h interface{}) {
        d := Dog{}
        t := reflect.TypeOf(d.Bark)

        if reflect.TypeOf(h) == t {
            fmt.Println("success")
        } else {
            fmt.Println("failed")
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...