var buf1 []Somestruct1
var buf2 []Somestruct2
var selected_buf //pointer, needs to be declared. I used *int, []interface{}, *[]interface{}, but nothing seems to work so far
changeme := 0
switch changeme {
case 0:
// should point to buf1 to mutate it in future
selected_buf = &buf1
case 1:
// should point to buf2 to mutate it in future
selected_buf = &buf2
}
// examples of use and mutation
len(selected_buf)
selected_buf = append(selected_buf, Somestruct1) // or Somestruct2 depending on pointer
var newstruct Somestruct3
for i := range buf1 {
current := buf1[i]
if current.somefield == someint {
newstruct.somefield = ¤t
}
}
И это работало нормально. хз что делать. пожалуйста помогите)
"модераторы, будьте добры - пишу с телефона в хреновой сети. спасибо"
@BurakSerdar Да, это как бы изменение типа переменной «на лету». Мы знаем, что это невозможно для языков со статической типизацией. Я нашел решение, как провести рефакторинг. Somestruct1 и Somestruct2 в любом случае связаны, поэтому цикл проходит через первый и вложенный цикл через второй. Ничего страшного. На данный момент)
Как я вижу, эти два типа будут объединены в один тип, поэтому одна возможная работа, которую можно сделать, — это ввести интерфейс с возможными методами и добавить его к этому интерфейсу.
type testinterface interface {
}
func main() {
var tmp []Somestruct1
var tmp2 []Somestruct2
var tmp3 []testinterface
tmp3 = append(tmp3, &Somestruct1)
tmp3 = append(tmp3, &Somestruct2)
}
Спасибо, попробую в следующий раз. Файл, над которым я работал, находится по адресу github.com/zhexyez/go-build-html/tree/master. Рефакторинга пока нет. Найдите корпус «R», но он уже изменил свою логику.
То, что вы пытаетесь сделать, не сработает. Какую реальную проблему вы пытаетесь решить? Зачем вам это нужно? Вполне вероятно, что есть и другие пути достижения цели.