Я хочу вернуть объект как HTTP-ответ, в котором одно из его полей допускает значение NULL. Проблема в том, что proto3 не позволяет мне сделать это легко. Это происходит потому, что я проанализировал указатель строки на строку, поэтому, когда указатель указывает на ноль, возникает эта ошибка runtime error: invalid memory address or nil pointer dereference
Я попытался решить эту проблему, по крайней мере, этими двумя обходными путями, которые я узнал из Интернета.
1. Использование oneof
упражнение.proto (определение сообщения)
message ExercisesData {
string Serial = 1 [json_name="serial"];
string Title = 2 [json_name="title"];
oneof OptionalSubmissionSerial {
string SubmissionSerial = 3 [json_name="submission_serial"];
}
mapper.go (для синтаксического анализа структуры Go в соответствии с прототипным сообщением)
exercise := &Exercise.ExercisesData {
Serial: e.Serial,
Title: e.Title,
OptionalSubmissionSerial: &Exercise.ExercisesData_SubmissionSerial{
SubmissionSerial: *e.SubmissionInfo.LatestSubmissionSerial,
},
}
2. Использование google / protobuf / wrappers.proto.
упражнение.proto (определение сообщения)
import "google/protobuf/wrappers.proto";
message ExercisesData {
string Serial = 1 [json_name="serial"];
string Title = 2 [json_name="title"];
google.protobuf.StringValue SubmissionSerial = 3 [json_name="submission_serial"];
}
mapper.go (для синтаксического анализа структуры Go в соответствии с прототипным сообщением)
exercise := &Exercise.ExercisesData {
Serial: e.Serial,
Title: e.Title,
SubmissionSerial: &wrappers.StringValue{
Value: *e.SubmissionInfo.LatestSubmissionSerial,
},
}
ожидаемый результат
Оба способа по-прежнему вызывают одно и то же сообщение об ошибке, единственная разница - это строка кода, на которую оно ссылается. Вот почему я такой беспомощный. Ожидаемый HTTP-ответ будет выглядеть так
{
"status": "success",
"data": [
{
"serial": "EXC-NT2OBHQT",
"title": "Title of Topic Exercise",
"submission_serial": null
}
]
}
Я действительно надеюсь, что кто-нибудь сможет помочь мне найти способ определить поле, допускающее значение NULL, в proto3 для ответа Http и как проанализировать его из структуры. Спасибо!