Не могу понять логику работы json.Marshal. Почему на выходе пустой объект?
Тут дело в том, что поле `text` у вас написано с маленькой буквы, а значит оно не экпортируемое.
Именно по этому такой результат. А когда вы напишите его с большой буквы - всё заработает как вы ожидаете.
type Test struct {
	Text string `json:"test"`
}
Вот так работает. Ответ нашел тут: Ссылка