Как определить «реальный» тип значения интерфейса {}?

Я не нашел подходящего ресурса для использования интерфейсных {} типов. Например

package main

import "fmt"

func weirdFunc(i int) interface{} {
    if i == 0 {
        return "zero"
    }
    return i
}
func main() {
    var i = 5
    var w = weirdFunc(5)

    // this example works!
    if tmp, ok := w.(int); ok {
        i += tmp
    }

    fmt.Println("i =", i)
}

Знаете ли вы хорошее введение в использование интерфейса Go {} ?

конкретные вопросы:

  • как мне получить "настоящий" Тип w?
  • есть ли способ получить строковое представление типа?
  • есть ли способ использовать строковое представление типа для преобразовать значение?
105
задан peterSO 31 March 2013 в 21:28
поделиться