Я недавно начал использовать Golang и наткнулся на проблему:
У меня есть две структуры, human
и alien
, обе из которых основаны на структуре creature
.Я хочу инициализировать один из них, основываясь на значении логического значения isAlien
внутри оператора if.
При использовании нотации human := human{}
или эквивалента пришельцев внутри блоков if для инициализации, экземпляры вызываютсянедоступен извне оператора if.
С другой стороны, обычное решение объявления типа и имени переменной перед оператором if и инициализации переменной внутри оператора if нене работают, потому что есть два разных типа:
var h human //use human or alien here?
if isAlien {
h = alien{} //Error: incompatible types
} else {
h = human{}
}
//same when swapping human with alien at the declaration
Я знаю, что мог бы просто объявить оба типа перед оператором if, но это решение не кажется мне элегантным.
Есть ли какое-то очевидное решение, которое я здесь упускаю?