@historydev
Острая аллергия на анимешников

Как провести деструктуризацию?

Как получить доступ к полям структур для создания двух переменных title, message?

package main

import (
	"math/rand"
	"notify/test"
)

type Notification struct {
	title   string
	message string
}

var notifications []Notification = []Notification{Notification{"Title1", "Msg1"}, Notification{"Title2", "Msg2"}}

func main() {
	notification := notifications[rand.Intn(len(notifications))] // Здесь должно быть title, message := notifications[1]
	notify.SendNotification(notification.title, notification.message)
	//notify2.SendHello()
}
  • Вопрос задан
  • 179 просмотров
Решения вопроса 1
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
То чего вы добиваетесь не идеоматично, паттерн не применяется в рабочем Go коде. Никакой деструктуризации base syntax не предполагает.
Просто показать возможности языка, ну и для code golfing:
func Destruct(s any) (e []any) {
	v := reflect.ValueOf(s)
	if v.Kind() != reflect.Struct {
		return nil
	}
	for i := 0; i < v.NumField(); i++ {
		e = append(e, v.Field(i).Interface())
	}
	return
}

Работающий пример в песочнице https://go.dev/play/p/uk1o-Nl4Ic8
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Kuzm1ch88
@Kuzm1ch88
title, message := notifications[1].title, notifications[1].message ?
Не особо понял чего хотите добиться, если ваш код и так работает
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы