Справочник экземпляров структур, или динамический вызов через переменную без reflection

55 views
Skip to first unread message

Павел Светлый

unread,
Sep 18, 2017, 4:43:38 AM9/18/17
to Golang Russian
Привет, котяточки.
Сорян за нубство, прост только разбираюсь с языком. Я хочу создавать экземпляры струткуры, исходя из значения переменной. Ну или в крайности через if задавать значение. Но чет у меня очень плохо получается:

type Struct1 struct {...}
type
Struct2 struct {...}
type
Struct3 struct {...}


func test
(path string) {
switch path:
case "struct1": tmp := new(Struct1)
case "struct2": tmp := new(Struct2)

case "struct3": tmp := new(Struct3)

}


Результат такой балалайки 
undefined: tmp

Подскажите, как мне быть?

Andrey Velikoredchanin

unread,
Sep 18, 2017, 4:55:59 AM9/18/17
to golang-ru
IMHO, статическая типизация подразумевает что так делать нельзя.
Все эти типы должны иметь что-то общее. Обычно имеется ввиду, что они реализуют один интерфейс и и tmp должна иметь предварительное объявление как интерфейс этого общего типа.

17 сентября 2017 г., 16:30 пользователь Павел Светлый <kob...@gmail.com> написал:

--
Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес golang-ru+unsubscribe@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

Mykhailo Tsiuptsiun

unread,
Sep 18, 2017, 4:58:52 AM9/18/17
to Golang Russian
вся фишка в "tmp :=" это все равно что "var tmp mytype". В Go у любых фигунних скобок "{...}": if {}, for {}, func(){} есть своя область видимости. Таким же свойством обладают и switch/select/case. при выходе из оласти видимости, все переменные которые были созданы при помощи "var" или  ":=" будут удалены.


пн, 18 сент. 2017 г. в 11:43, Павел Светлый <kob...@gmail.com>:
--
Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес golang-ru+...@googlegroups.com.

Павел Светлый

unread,
Sep 18, 2017, 3:01:36 PM9/18/17
to Golang Russian
Спасибо за разъяснение.
Если честно, то я на уровне логики не могу понять такой алгоритм.
Т.е. у меня N объектов объединены интерфейсом. Я получаю этот интерфейс... Блин, пока писал, понял как сделать :)
Спасибо, попробую реализовать.

Павел Светлый

unread,
Sep 18, 2017, 3:02:30 PM9/18/17
to Golang Russian
Не знал этого нюанса на счет if/switch. Спасибо.
Reply all
Reply to author
Forward
0 new messages