В этой ссылке на игровую площадку Я создал надуманную версию своего кода, в которой я создаю переменную типа X на основе входной строки.Переменная будет одним из нескольких типов и реализует интерфейс.
Код в настоящее время компилируется и дает правильный результат, однако он кажется мне довольно многословным, и я пытаюсь выяснить, существует ли сокращенный подход к результату, которого я достигаю.В примере есть 3 типа (собака, кошка и птица), которые реализуют интерфейс (животное), однако мой фактический код будет содержать до 40 типов в этом операторе switch.
Причина, по которой я использую этот код, заключается в том, что при получении результатов из СУБД я пытаюсь использовать универсальный метод загрузки, который в сочетании с sqlx загружает таблицу базы данных вправильная структура на основе входной строки.Я имею полный контроль над приложением и могу изменить входную строку на другой тип, если требуется.
Код с детской площадки ссылка:
package main
import (
"fmt"
)
type animal interface {
call() string
}
type dog struct {
}
func (d *dog) call() string {
return "Woof!"
}
type cat struct {
}
func (c *cat) call() string {
return "Meow!"
}
type bird struct {
}
func (c *bird) call() string {
return "Chirp!"
}
func main() {
var animal animal
animalType := "dog"
switch animalType{
case "dog":
animal = new(dog)
case "cat":
animal = new(cat)
case "bird":
animal = new(bird)