Проблема с именем переменной v
.Пожалуйста, смотрите ниже код
func Exported (v interface{}){
v, ok := v.(Foo)
if !ok {
log.Fatal("oh fuk")
}
// but v.Bar is not available here tho ??
}
здесь, имя интерфейса v
и после приведения типов оно присваивается переменной v
Поскольку v
имеет тип interface
, вы не можете получить значениеиз Foo
struct.
Чтобы преодолеть эту проблему, используйте другое имя при приведении типов, например
b, ok := v.(Foo)
И вы сможете получить значение Bar
, используя b.Bar
Рабочий пример приведен ниже:
package main
import (
"log"
"fmt"
)
func main() {
foo := Foo{Bar: "Test@123"}
Exported(foo)
}
type Foo struct{
Bar string
}
func Exported (v interface{}){
// cast v to Foo
b, ok := v.(Foo)
if !ok {
log.Fatal("oh fuk")
}
fmt.Println(b.Bar)
}