// Copyright 2018 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.package implimport ()// Every enum and message type generated by protoc-gen-go since commit 2fc053c5// on February 25th, 2016 has had a method to get the raw descriptor.// Types that were not generated by protoc-gen-go or were generated prior// to that version are not supported.//// The []byte returned is the encoded form of a FileDescriptorProto message// compressed using GZIP. The []int is the path from the top-level file// to the specific message or enum declaration.type ( enumV1 interface { EnumDescriptor() ([]byte, []int) } messageV1 interface { Descriptor() ([]byte, []int) })var legacyFileDescCache sync.Map// map[*byte]protoreflect.FileDescriptor// legacyLoadFileDesc unmarshals b as a compressed FileDescriptorProto message.//// This assumes that b is immutable and that b does not refer to part of a// concatenated series of GZIP files (which would require shenanigans that// rely on the concatenation properties of both protobufs and GZIP).// File descriptors generated by protoc-gen-go do not rely on that property.func legacyLoadFileDesc( []byte) protoreflect.FileDescriptor {// Fast-path: check whether we already have a cached file descriptor.if , := legacyFileDescCache.Load(&[0]); {return .(protoreflect.FileDescriptor) }// Slow-path: decompress and unmarshal the file descriptor proto. , := gzip.NewReader(bytes.NewReader())if != nil {panic() } , := io.ReadAll()if != nil {panic() } := filedesc.Builder{RawDescriptor: ,FileRegistry: resolverOnly{protoregistry.GlobalFiles}, // do not register back to global registry }.Build().Fileif , := legacyFileDescCache.LoadOrStore(&[0], ); {return .(protoreflect.FileDescriptor) }return}type resolverOnly struct { reg *protoregistry.Files}func ( resolverOnly) ( string) (protoreflect.FileDescriptor, error) {return .reg.FindFileByPath()}func ( resolverOnly) ( protoreflect.FullName) (protoreflect.Descriptor, error) {return .reg.FindDescriptorByName()}func (resolverOnly) (protoreflect.FileDescriptor) error {returnnil}
The pages are generated with Goldsv0.8.2. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds.