2015-10-25 2 views
0

У меня есть структура go, и мне нужно работать с одним из полей. Однако я начинаю с строки. Как это сделать, чтобы получить поле.Имена полей структуры, начинающиеся со строки

package main 
import "fmt" 

func main() { 

    type Point struct{ 
    x int 
    y int 
} 

    pt := Point{x:2, y:3} 
    a := "x" 
    fmt.Printf("%s", pt.a) 
} 

С a = "x" Я ожидаю pt.x = 2. Вот сообщение об ошибке, которое оно распечатывает. Я определенно начинаю с строки, поэтому я не могу просто удалить кавычки.

$ go run point.go 
# command-line-arguments 
./point.go:14: pt.a undefined (type Point has no field or method a) 
+0

Является ли это 'Point' struct вашим фактическим прецедентом? Можете ли вы объяснить немного больше о том, где вы пытаетесь это сделать? –

+0

Что вы ожидаете от этого кода? –

+0

Имена полей 'Point' -' x' и 'y', а не' a'. – Akavall

ответ

3

Если вам нужно получить доступ к полю, имя которого указано как строка, у вас нет выбора, кроме как использовать отражение. Go не Python. :-)

This blog имеет приятное объяснение.

Here - это документация пакета отражения.

Но учтите, что отражение обычно должно использоваться только в крайнем случае. Он устраняет безопасность статического типа и вреден для производительности.

Что вы действительно ищете? Возможно, есть способ удовлетворить ваши требования без использования рефлексии. Например, если вам не нужны методы, привязанные к вашей структуре, вы можете использовать map[string]int.

Смежные вопросы