PHP 편집자 Baicao는 gRPC 사용을 소개할 때 gRPC 요청에서 지정된 값이 false인 경우 gRPC가 부울 값을 반환하지 않는다고 지적했습니다. 즉, gRPC를 사용할 때 혼동과 오류를 피하기 위해 반환 값을 어떻게 처리하는지 주의를 기울여야 한다는 의미입니다. 이 세부 사항을 이해하면 gRPC의 기능을 더 잘 이해하고 적용하고 프로그래밍 효율성과 코드 품질을 향상시키는 데 도움이 됩니다. 프로젝트에 더 나은 성능과 확장성을 제공하기 위해 gRPC의 더 많은 기능과 사용법을 살펴보겠습니다.
func (m *todoserver) gettodos(ctx context.context, empty *emptypb.empty) (*desc.gettodosresponse, error) { todos, err := m.todoservice.gettodos() if err != nil { return nil, err } todosresp := make([]*desc.gettodosresponse_todo, 0, len(todos)) for _, todo := range todos { todosresp = append(todosresp, &desc.gettodosresponse_todo{ id: todo.id, title: todo.title, iscompleted: todo.iscompleted, }) } return &desc.gettodosresponse{todos: todosresp}, nil }
service TodoService { rpc GetTodos(google.protobuf.Empty) returns (GetTodosResponse) {} } message GetTodosResponse { repeated Todo todos = 1; message Todo { int64 id = 1; string title = 2; bool is_completed = 3; } }
service TodoService { rpc GetTodos(google.protobuf.Empty) returns (GetTodosResponse) {} } message GetTodosResponse { repeated Todo todos = 1; message Todo { int64 id = 1; string title = 2; bool is_completed = 3; } }
데이터베이스에 기록이 있습니다 |번호 |제목 |완료 | |-|-|-| |1 |아아아|거짓|
위 함수는 {"todos": [{"id": "1", "title": "aaa"}]}
但一旦我将 is_completed
更改为 true
,结果是正确的 {"todos ": [{"id": "1", "title": "aaa", "iscompleted": true}]}
이를 반환합니다. 이는 의도적으로 설계된 것이며 효율성을 향상시키기 위한 것입니다.
bool
的“零”值是 false
- 因此,当使用 false
值初始化 protobuf
结构时,在使用标准库的 encoding/json
解组器时不需要显式声明该字段。在编码端,如果字段的 json 标记包含 omitempty
限定符,则标准库的 encoding/json
마샬러는 0 값을 제거합니다. 이것이 바로 여러분이 보는 것입니다.
title
字符串字段是 ""
(즉, 문자열의 0 값)인 경우에도 동일한 동작을 볼 수 있습니다.
생성된 코드 보기(*.pb.go
),结构体的 bool
필드 정의는 다음과 같습니다.
따라서 json:"...,omitempty"
指示 encoding/json
마샬러는 이러한 태그를 사용하여 마샬링하는 동안 0 값을 생략합니다.
이 동작을 재정의하려면:
omitempty
지시문을 제거할 수 있습니다(권장되지 않음 - 개발 수명 주기 동안 편집을 관리해야 하기 때문에). 하지만 꼭 해야 한다면 이 답변;grpc-gateway
을 사용하는 경우 런타임에 재정의하세요. 예: encoding/json
),而是使用此包中的 json
封送拆收器 "google.golang.org/protobuf/encoding/protojson"
:이 답변에서 언급한 바와 같습니다.
위 내용은 값이 false인 경우 gRPC는 부울 값을 반환하지 않습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!