diff --git a/cmd/protoc-gen-go/internal_gengo/main.go b/cmd/protoc-gen-go/internal_gengo/main.go
index 6bcfebd..0697ffd 100644
--- a/cmd/protoc-gen-go/internal_gengo/main.go
+++ b/cmd/protoc-gen-go/internal_gengo/main.go
@@ -30,6 +30,18 @@
 const minimumVersion = 0
 
 const (
+	// generateEnumMapVars specifies whether to generate enum maps,
+	// which provide a bi-directional mapping between enum numbers and names.
+	generateEnumMapVars = true
+
+	// generateRawDescMethods specifies whether to generate EnumDescriptor and
+	// Descriptor methods for enums and messages. These methods return the
+	// GZIP'd contents of the raw file descriptor and the path from the root
+	// to the given enum or message descriptor.
+	generateRawDescMethods = true
+)
+
+const (
 	syncPackage          = protogen.GoImportPath("sync")
 	mathPackage          = protogen.GoImportPath("math")
 	protoifacePackage    = protogen.GoImportPath("github.com/golang/protobuf/v2/runtime/protoiface")
@@ -224,30 +236,34 @@
 	g.P()
 
 	// Enum value mapping (number -> name).
-	nameMap := enum.GoIdent.GoName + "_name"
-	g.P("// Deprecated: Use ", enum.GoIdent.GoName, ".Type.Values instead.")
-	g.P("var ", nameMap, " = map[int32]string{")
-	generated := make(map[protoreflect.EnumNumber]bool)
-	for _, value := range enum.Values {
-		duplicate := ""
-		if _, present := generated[value.Desc.Number()]; present {
-			duplicate = "// Duplicate value: "
+	if generateEnumMapVars {
+		nameMap := enum.GoIdent.GoName + "_name"
+		g.P("// Deprecated: Use ", enum.GoIdent.GoName, ".Type.Values instead.")
+		g.P("var ", nameMap, " = map[int32]string{")
+		generated := make(map[protoreflect.EnumNumber]bool)
+		for _, value := range enum.Values {
+			duplicate := ""
+			if _, present := generated[value.Desc.Number()]; present {
+				duplicate = "// Duplicate value: "
+			}
+			g.P(duplicate, value.Desc.Number(), ": ", strconv.Quote(string(value.Desc.Name())), ",")
+			generated[value.Desc.Number()] = true
 		}
-		g.P(duplicate, value.Desc.Number(), ": ", strconv.Quote(string(value.Desc.Name())), ",")
-		generated[value.Desc.Number()] = true
+		g.P("}")
+		g.P()
 	}
-	g.P("}")
-	g.P()
 
 	// Enum value mapping (name -> number).
-	valueMap := enum.GoIdent.GoName + "_value"
-	g.P("// Deprecated: Use ", enum.GoIdent.GoName, ".Type.Values instead.")
-	g.P("var ", valueMap, " = map[string]int32{")
-	for _, value := range enum.Values {
-		g.P(strconv.Quote(string(value.Desc.Name())), ": ", value.Desc.Number(), ",")
+	if generateEnumMapVars {
+		valueMap := enum.GoIdent.GoName + "_value"
+		g.P("// Deprecated: Use ", enum.GoIdent.GoName, ".Type.Values instead.")
+		g.P("var ", valueMap, " = map[string]int32{")
+		for _, value := range enum.Values {
+			g.P(strconv.Quote(string(value.Desc.Name())), ": ", value.Desc.Number(), ",")
+		}
+		g.P("}")
+		g.P()
 	}
-	g.P("}")
-	g.P()
 
 	// Enum method.
 	if enum.Desc.Syntax() != protoreflect.Proto3 {
@@ -281,15 +297,17 @@
 	}
 
 	// EnumDescriptor method.
-	var indexes []string
-	for i := 1; i < len(enum.Location.Path); i += 2 {
-		indexes = append(indexes, strconv.Itoa(int(enum.Location.Path[i])))
+	if generateRawDescMethods {
+		var indexes []string
+		for i := 1; i < len(enum.Location.Path); i += 2 {
+			indexes = append(indexes, strconv.Itoa(int(enum.Location.Path[i])))
+		}
+		g.P("// Deprecated: Use ", enum.GoIdent, ".Type instead.")
+		g.P("func (", enum.GoIdent, ") EnumDescriptor() ([]byte, []int) {")
+		g.P("return ", rawDescVarName(f), "GZIP(), []int{", strings.Join(indexes, ","), "}")
+		g.P("}")
+		g.P()
 	}
-	g.P("// Deprecated: Use ", enum.GoIdent, ".Type instead.")
-	g.P("func (", enum.GoIdent, ") EnumDescriptor() ([]byte, []int) {")
-	g.P("return ", rawDescVarName(f), "GZIP(), []int{", strings.Join(indexes, ","), "}")
-	g.P("}")
-	g.P()
 
 	genWellKnownType(g, "", enum.GoIdent, enum.Desc)
 }
@@ -395,15 +413,17 @@
 	genReflectMessage(gen, g, f, message)
 
 	// Descriptor method.
-	var indexes []string
-	for i := 1; i < len(message.Location.Path); i += 2 {
-		indexes = append(indexes, strconv.Itoa(int(message.Location.Path[i])))
+	if generateRawDescMethods {
+		var indexes []string
+		for i := 1; i < len(message.Location.Path); i += 2 {
+			indexes = append(indexes, strconv.Itoa(int(message.Location.Path[i])))
+		}
+		g.P("// Deprecated: Use ", message.GoIdent, ".ProtoReflect.Type instead.")
+		g.P("func (*", message.GoIdent, ") Descriptor() ([]byte, []int) {")
+		g.P("return ", rawDescVarName(f), "GZIP(), []int{", strings.Join(indexes, ","), "}")
+		g.P("}")
+		g.P()
 	}
-	g.P("// Deprecated: Use ", message.GoIdent, ".ProtoReflect.Type instead.")
-	g.P("func (*", message.GoIdent, ") Descriptor() ([]byte, []int) {")
-	g.P("return ", rawDescVarName(f), "GZIP(), []int{", strings.Join(indexes, ","), "}")
-	g.P("}")
-	g.P()
 
 	// ExtensionRangeArray method.
 	if extranges := message.Desc.ExtensionRanges(); extranges.Len() > 0 {
diff --git a/cmd/protoc-gen-go/internal_gengo/reflect.go b/cmd/protoc-gen-go/internal_gengo/reflect.go
index 0b584a4..fb33ea2 100644
--- a/cmd/protoc-gen-go/internal_gengo/reflect.go
+++ b/cmd/protoc-gen-go/internal_gengo/reflect.go
@@ -210,21 +210,23 @@
 	g.P("}")
 	g.P()
 
-	onceVar := rawDescVarName(f) + "Once"
-	dataVar := rawDescVarName(f) + "Data"
-	g.P("var (")
-	g.P(onceVar, " ", syncPackage.Ident("Once"))
-	g.P(dataVar, " = ", rawDescVarName(f))
-	g.P(")")
-	g.P()
+	if generateRawDescMethods {
+		onceVar := rawDescVarName(f) + "Once"
+		dataVar := rawDescVarName(f) + "Data"
+		g.P("var (")
+		g.P(onceVar, " ", syncPackage.Ident("Once"))
+		g.P(dataVar, " = ", rawDescVarName(f))
+		g.P(")")
+		g.P()
 
-	g.P("func ", rawDescVarName(f), "GZIP() []byte {")
-	g.P(onceVar, ".Do(func() {")
-	g.P(dataVar, " = ", protoimplPackage.Ident("X"), ".CompressGZIP(", dataVar, ")")
-	g.P("})")
-	g.P("return ", dataVar)
-	g.P("}")
-	g.P()
+		g.P("func ", rawDescVarName(f), "GZIP() []byte {")
+		g.P(onceVar, ".Do(func() {")
+		g.P(dataVar, " = ", protoimplPackage.Ident("X"), ".CompressGZIP(", dataVar, ")")
+		g.P("})")
+		g.P("return ", dataVar)
+		g.P("}")
+		g.P()
+	}
 }
 
 func genReflectEnum(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo, enum *protogen.Enum) {
