5

Как определить тип объекта в Go?

27

Как узнать тип объекта в Go? В Python я просто использую typeof, чтобы получить тип объекта. Существует ли аналогичный способ сделать это в Go?

Вот код, из которого я итерируюсь:

for e := dlist.Front(); e != nil; e = e.Next() {
    lines := e.Value
    fmt.Printf(reflect.TypeOf(lines))
}

В этом случае я не могу получить тип объекта lines, который является массивом строк.

5 ответ(ов)

7

В пакете рефлексии Go есть методы для инспекции типов переменных.

Ниже приведённый фрагмент кода напечатает рефлексированные типы для строки, целого числа и числа с плавающей запятой.

package main

import (
    "fmt"
    "reflect"
)

func main() {

    tst := "string"
    tst2 := 10
    tst3 := 1.2

    fmt.Println(reflect.TypeOf(tst))
    fmt.Println(reflect.TypeOf(tst2))
    fmt.Println(reflect.TypeOf(tst3))

}

Вывод будет следующим:

string
int
float64

Вы можете посмотреть этот код в действии по ссылке: http://play.golang.org/p/XQMcUVsOja.

Дополнительная документация доступна здесь: http://golang.org/pkg/reflect/#Type.

0

Чтобы получить строковое представление типа переменной в Go, можно воспользоваться функцией fmt.Printf с форматом %T. Этот формат выводит представление типа значения в синтаксисе Go.

Вот простой пример:

package main

import "fmt"

func main() {
    types := []interface{}{"a", 6, 6.0, true}
    for _, v := range types {
        fmt.Printf("%T\n", v)
    }
}

Этот код создаёт срез types, который содержит значения различных типов, и затем выводит тип каждого значения. Результат выполнения программы будет следующим:

string
int
float64
bool

Таким образом, с помощью %T вы можете легко узнать тип любой переменной в Go.

0

Я бы посоветовал избегать использования пакета reflect. Вместо этого используйте %T в функции fmt.Printf для получения типа переменной.

Вот пример, как это сделать:

package main

import (
    "fmt"
)

func main() {
    b := true
    s := ""
    n := 1
    f := 1.0
    a := []string{"foo", "bar", "baz"}

    fmt.Printf("%T\n", b) // выводит: bool
    fmt.Printf("%T\n", s) // выводит: string
    fmt.Printf("%T\n", n) // выводит: int
    fmt.Printf("%T\n", f) // выводит: float64
    fmt.Printf("%T\n", a) // выводит: []string
}

В этом примере используются различные типы данных, и с помощью %T мы получаем их тип на выходе. Это простой и эффективный способ определить тип переменной, не прибегая к более сложным методам с использованием пакета reflect.

0

Лучший способ - использовать концепцию рефлексии в Go.

Метод reflect.TypeOf возвращает тип вместе с именем пакета.

Метод reflect.TypeOf().Kind() возвращает основной тип.

0

Коротко говоря, используйте fmt.Printf("%T", var1) или другие варианты из пакета fmt.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь