Вопросы с тегом «go-reflect»

387
Как найти тип объекта в Go?

Как мне найти тип объекта в Go? В Python я просто использую, typeofчтобы выбрать тип объекта. Аналогично в Go, есть ли способ реализовать то же самое? Вот контейнер, из которого я итерирую: for e := dlist.Front(); e != nil; e = e.Next() { lines := e.Value fmt.Printf(reflect.TypeOf(lines)) } Я не...

194
Тип конвертирующих фрагментов интерфейсов

Мне интересно , почему Go does't неявно преобразовать []Tв []interface{}когда он будет неявно преобразовать Tв interface{}. Есть ли что-то нетривиальное в этом преобразовании, которое я пропускаю? Пример: func foo([]interface{}) { /* do something */ } func main() { var a []string =...

132
Как сравнить, равны ли две структуры, срезы или карты?

Я хочу проверить, равны ли две структуры, срезы и карты. Но у меня проблемы со следующим кодом. Смотрите мои комментарии в соответствующих строках. package main import ( "fmt" "reflect" ) type T struct { X int Y string Z []int M map[string]int } func main() { t1 := T{ X: 1, Y: "lei", Z: []int{1, 2,...

108
Итерации по полям структуры в Go

По сути, единственный способ (который я знаю) перебирать значения полей a structвыглядит следующим образом: type Example struct { a_number uint32 a_string string } //... r := &Example{(2 << 31) - 1, "...."}: for _, d:= range []interface{}{ r.a_number, r.a_string, } { //do something with...

107
Как вы устанавливаете значение поля структуры с помощью функции «Отражение»?

трудно работать с полями структуры с помощью reflectpackage. в частности, не придумали, как задать значение поля. введите t struct {fi int; строка fs} var rt = t {123, "jblow"} var i64 int64 = 456 получение имени поля i - похоже, это работает var field = reflect.TypeOf(r).Field(i).Name получение...

102
Как получить имя функции в Go?

Можно ли получить имя для данной функции? Сказать: func foo() { } func GetFunctionName(i interface{}) string { // ... } func main() { // Will print "name: foo" fmt.Println("name:", GetFunctionName(foo)) } Мне сказали, что runtime.FuncForPC поможет, но я не понял, как его использовать....

99
диапазон по интерфейсу {}, в котором хранится фрагмент

Учитывая сценарий, в котором у вас есть функция, которая принимает t interface{}. Если определено, что tэто срез, как мне пройти rangeнад этим срезом? func main() { data := []string{"one","two","three"} test(data) moredata := []int{1,2,3} test(data) } func test(t interface{}) { switch...