Задать вопрос
@gvpugachev
Разработчик Delphi, Go, FrontEnd

Как «переопределить» поля структуры в Golang?

Здравствуйте, у меня есть структура
DefaultResponse struct {
		Code  int    `json:"code"`
		Msg   string `json:"msg"`
	        Datas []Data`json:"datas"` 
	}


и есть множество отдельных пакетов где я хочу переопределить структуру Data при этом сохранив DefaultResponse.
Например мне в одном пакете нужен:
Data struct {
		ID    int64
		Name  string
	}

а в другом
Data struct {
		ID    int64
		Value  int64
	}

Как это реализовать?

UPD: Общий для всех пакетов DefaultResponse нужен чтобы не таскать один и тот же функционал связанный с ним во все пакеты.
  • Вопрос задан
  • 764 просмотра
Подписаться 2 Простой Комментировать
Решения вопроса 1
В Го это делается с помощью композиции
https://play.golang.org/p/9ThbqjKzytZ
Код
package main

import (
	"encoding/json"
	"fmt"
)

type Data1 struct {
	SomeField string `json:"some_field"`
}

type Data2 struct {
	SomeOtherField string `json:"some_other_field"`
}

type DefaultResponse struct {
	Code int    `json:"code"`
	Msg  string `json:"msg"`
}

type Response1 struct {
	DefaultResponse
	Datas []Data1 `json:"datas"`
}

type Response2 struct {
	DefaultResponse
	Datas []Data2 `json:"datas"`
}

func main() {
	json1 := `{"code":123,"msg":"test","datas":[{"some_field":"test field data"}]}`
	json2 := `{"code":456,"msg":"test2","datas":[{"some_other_field":"other test field data"}]}`

	var res1 Response1
	var res2 Response2

	json.Unmarshal([]byte(json1), &res1)
	json.Unmarshal([]byte(json2), &res2)

	fmt.Printf("%+v\n", res1)
	fmt.Printf("%+v\n", res2)
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы