cmd/protoc-gen-go: group default consts and vars in blocks

Group the default constant and variable declarations together in a block
for better readability in godoc.

Change-Id: I6b62f5374f0302d0f7cb224cbe34102359c8c51d
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/189057
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/cmd/protoc-gen-go/internal_gengo/main.go b/cmd/protoc-gen-go/internal_gengo/main.go
index d455c28..dca57e0 100644
--- a/cmd/protoc-gen-go/internal_gengo/main.go
+++ b/cmd/protoc-gen-go/internal_gengo/main.go
@@ -402,7 +402,7 @@
 	g.P("}")
 	g.P()
 
-	genDefaultConsts(g, f, message)
+	genDefaultDecls(g, f, message)
 	genMessageMethods(gen, g, f, message)
 	genOneofWrapperTypes(gen, g, f, message)
 }
@@ -499,56 +499,61 @@
 	sf.append(field.GoName)
 }
 
-// genDefaultConsts generates consts and vars holding the default
+// genDefaultDecls generates consts and vars holding the default
 // values of fields.
-func genDefaultConsts(g *protogen.GeneratedFile, f *fileInfo, message *protogen.Message) {
+func genDefaultDecls(g *protogen.GeneratedFile, f *fileInfo, message *protogen.Message) {
+	var consts, vars []string
 	for _, field := range message.Fields {
 		if !field.Desc.HasDefault() {
 			continue
 		}
-		defVarName := "Default_" + message.GoIdent.GoName + "_" + field.GoName
-		def := field.Desc.Default()
+		name := "Default_" + message.GoIdent.GoName + "_" + field.GoName
+		goType, _ := fieldGoType(g, f, field)
+		defVal := field.Desc.Default()
 		switch field.Desc.Kind() {
 		case protoreflect.StringKind:
-			g.P("const ", defVarName, " string = ", strconv.Quote(def.String()))
+			consts = append(consts, fmt.Sprintf("%s = %s(%q)", name, goType, defVal.String()))
 		case protoreflect.BytesKind:
-			g.P("var ", defVarName, " []byte = []byte(", strconv.Quote(string(def.Bytes())), ")")
+			vars = append(vars, fmt.Sprintf("%s = %s(%q)", name, goType, defVal.Bytes()))
 		case protoreflect.EnumKind:
-			evalueDesc := field.Desc.DefaultEnumValue()
-			enum := field.Enum
-			evalue := enum.Values[evalueDesc.Index()]
-			g.P("const ", defVarName, " ", field.Enum.GoIdent, " = ", evalue.GoIdent)
+			idx := field.Desc.DefaultEnumValue().Index()
+			val := field.Enum.Values[idx]
+			consts = append(consts, fmt.Sprintf("%s = %s", name, g.QualifiedGoIdent(val.GoIdent)))
 		case protoreflect.FloatKind, protoreflect.DoubleKind:
-			// Floating point numbers need extra handling for -Inf/Inf/NaN.
-			f := field.Desc.Default().Float()
-			goType := "float64"
-			if field.Desc.Kind() == protoreflect.FloatKind {
-				goType = "float32"
-			}
-			// funcCall returns a call to a function in the math package,
-			// possibly converting the result to float32.
-			funcCall := func(fn, param string) string {
-				s := g.QualifiedGoIdent(mathPackage.Ident(fn)) + param
-				if goType != "float64" {
-					s = goType + "(" + s + ")"
+			if f := defVal.Float(); math.IsNaN(f) || math.IsInf(f, 0) {
+				var fn, arg string
+				switch f := defVal.Float(); {
+				case math.IsInf(f, -1):
+					fn, arg = g.QualifiedGoIdent(mathPackage.Ident("Inf")), "-1"
+				case math.IsInf(f, +1):
+					fn, arg = g.QualifiedGoIdent(mathPackage.Ident("Inf")), "+1"
+				case math.IsNaN(f):
+					fn, arg = g.QualifiedGoIdent(mathPackage.Ident("NaN")), ""
 				}
-				return s
-			}
-			switch {
-			case math.IsInf(f, -1):
-				g.P("var ", defVarName, " ", goType, " = ", funcCall("Inf", "(-1)"))
-			case math.IsInf(f, 1):
-				g.P("var ", defVarName, " ", goType, " = ", funcCall("Inf", "(1)"))
-			case math.IsNaN(f):
-				g.P("var ", defVarName, " ", goType, " = ", funcCall("NaN", "()"))
-			default:
-				g.P("const ", defVarName, " ", goType, " = ", field.Desc.Default().Interface())
+				vars = append(vars, fmt.Sprintf("%s = %s(%s(%s))", name, goType, fn, arg))
+			} else {
+				consts = append(consts, fmt.Sprintf("%s = %s(%v)", name, goType, f))
 			}
 		default:
-			goType, _ := fieldGoType(g, f, field)
-			g.P("const ", defVarName, " ", goType, " = ", def.Interface())
+			consts = append(consts, fmt.Sprintf("%s = %s(%v)", name, goType, defVal.Interface()))
 		}
 	}
+	if len(consts) > 0 {
+		g.P("// Default values for ", message.GoIdent, " fields.")
+		g.P("const (")
+		for _, s := range consts {
+			g.P(s)
+		}
+		g.P(")")
+	}
+	if len(vars) > 0 {
+		g.P("// Default values for ", message.GoIdent, " fields.")
+		g.P("var (")
+		for _, s := range vars {
+			g.P(s)
+		}
+		g.P(")")
+	}
 	g.P()
 }
 
diff --git a/cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go b/cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go
index 23b799e..53d68a2 100644
--- a/cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go
+++ b/cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go
@@ -194,10 +194,16 @@
 	OneofField isM_OneofField `protobuf_oneof:"oneof_field"`
 }
 
-const Default_M_S string = "default"
+// Default values for M fields.
+const (
+	Default_M_S = string("default")
+)
 
-var Default_M_B []byte = []byte("default")
-var Default_M_F float64 = math.NaN()
+// Default values for M fields.
+var (
+	Default_M_B = []byte("default")
+	Default_M_F = float64(math.NaN())
+)
 
 func (x *M) Reset() {
 	*x = M{}
diff --git a/cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go b/cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go
index cc63144..b833039 100644
--- a/cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go
+++ b/cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go
@@ -77,7 +77,10 @@
 	EnumField     *Enum   `protobuf:"varint,2,opt,name=enum_field,json=enumField,enum=Enum,def=0" json:"enum_field,omitempty"`
 }
 
-const Default_Message_EnumField Enum = Enum_ZERO
+// Default values for Message fields.
+const (
+	Default_Message_EnumField = Enum_ZERO
+)
 
 func (x *Message) Reset() {
 	*x = Message{}
diff --git a/cmd/protoc-gen-go/testdata/proto2/enum.pb.go b/cmd/protoc-gen-go/testdata/proto2/enum.pb.go
index 900e59c..fb4e3cc 100644
--- a/cmd/protoc-gen-go/testdata/proto2/enum.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto2/enum.pb.go
@@ -345,8 +345,11 @@
 	DefaultDuplicate2 *EnumType2 `protobuf:"varint,2,opt,name=default_duplicate2,json=defaultDuplicate2,enum=goproto.protoc.proto2.EnumType2,def=1" json:"default_duplicate2,omitempty"`
 }
 
-const Default_EnumContainerMessage1_DefaultDuplicate1 EnumType2 = EnumType2_duplicate1
-const Default_EnumContainerMessage1_DefaultDuplicate2 EnumType2 = EnumType2_duplicate2
+// Default values for EnumContainerMessage1 fields.
+const (
+	Default_EnumContainerMessage1_DefaultDuplicate1 = EnumType2_duplicate1
+	Default_EnumContainerMessage1_DefaultDuplicate2 = EnumType2_duplicate2
+)
 
 func (x *EnumContainerMessage1) Reset() {
 	*x = EnumContainerMessage1{}
diff --git a/cmd/protoc-gen-go/testdata/proto2/fields.pb.go b/cmd/protoc-gen-go/testdata/proto2/fields.pb.go
index 3b9b30e..6d9749d 100644
--- a/cmd/protoc-gen-go/testdata/proto2/fields.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto2/fields.pb.go
@@ -185,33 +185,37 @@
 	OneofTwo isFieldTestMessage_OneofTwo `protobuf_oneof:"oneof_two"`
 }
 
-const Default_FieldTestMessage_DefaultBool bool = true
-const Default_FieldTestMessage_DefaultEnum FieldTestMessage_Enum = FieldTestMessage_ONE
-const Default_FieldTestMessage_DefaultInt32 int32 = 1
-const Default_FieldTestMessage_DefaultSint32 int32 = 1
-const Default_FieldTestMessage_DefaultUint32 uint32 = 1
-const Default_FieldTestMessage_DefaultInt64 int64 = 1
-const Default_FieldTestMessage_DefaultSint64 int64 = 1
-const Default_FieldTestMessage_DefaultUint64 uint64 = 1
-const Default_FieldTestMessage_DefaultSfixed32 int32 = 1
-const Default_FieldTestMessage_DefaultFixed32 uint32 = 1
-const Default_FieldTestMessage_DefaultFloat float32 = 3.14
-const Default_FieldTestMessage_DefaultSfixed64 int64 = 1
-const Default_FieldTestMessage_DefaultFixed64 uint64 = 1
-const Default_FieldTestMessage_DefaultDouble float64 = 3.1415
-const Default_FieldTestMessage_DefaultString string = "hello,\"world!\"\n"
+// Default values for FieldTestMessage fields.
+const (
+	Default_FieldTestMessage_DefaultBool       = bool(true)
+	Default_FieldTestMessage_DefaultEnum       = FieldTestMessage_ONE
+	Default_FieldTestMessage_DefaultInt32      = int32(1)
+	Default_FieldTestMessage_DefaultSint32     = int32(1)
+	Default_FieldTestMessage_DefaultUint32     = uint32(1)
+	Default_FieldTestMessage_DefaultInt64      = int64(1)
+	Default_FieldTestMessage_DefaultSint64     = int64(1)
+	Default_FieldTestMessage_DefaultUint64     = uint64(1)
+	Default_FieldTestMessage_DefaultSfixed32   = int32(1)
+	Default_FieldTestMessage_DefaultFixed32    = uint32(1)
+	Default_FieldTestMessage_DefaultFloat      = float32(3.140000104904175)
+	Default_FieldTestMessage_DefaultSfixed64   = int64(1)
+	Default_FieldTestMessage_DefaultFixed64    = uint64(1)
+	Default_FieldTestMessage_DefaultDouble     = float64(3.1415)
+	Default_FieldTestMessage_DefaultString     = string("hello,\"world!\"\n")
+	Default_FieldTestMessage_DefaultZeroString = string("")
+)
 
-var Default_FieldTestMessage_DefaultBytes []byte = []byte("hello,ޭ\xbe\xef")
-
-const Default_FieldTestMessage_DefaultZeroString string = ""
-
-var Default_FieldTestMessage_DefaultZeroBytes []byte = []byte("")
-var Default_FieldTestMessage_DefaultFloatNeginf float32 = float32(math.Inf(-1))
-var Default_FieldTestMessage_DefaultFloatPosinf float32 = float32(math.Inf(1))
-var Default_FieldTestMessage_DefaultFloatNan float32 = float32(math.NaN())
-var Default_FieldTestMessage_DefaultDoubleNeginf float64 = math.Inf(-1)
-var Default_FieldTestMessage_DefaultDoublePosinf float64 = math.Inf(1)
-var Default_FieldTestMessage_DefaultDoubleNan float64 = math.NaN()
+// Default values for FieldTestMessage fields.
+var (
+	Default_FieldTestMessage_DefaultBytes        = []byte("hello,ޭ\xbe\xef")
+	Default_FieldTestMessage_DefaultZeroBytes    = []byte("")
+	Default_FieldTestMessage_DefaultFloatNeginf  = float32(math.Inf(-1))
+	Default_FieldTestMessage_DefaultFloatPosinf  = float32(math.Inf(+1))
+	Default_FieldTestMessage_DefaultFloatNan     = float32(math.NaN())
+	Default_FieldTestMessage_DefaultDoubleNeginf = float64(math.Inf(-1))
+	Default_FieldTestMessage_DefaultDoublePosinf = float64(math.Inf(+1))
+	Default_FieldTestMessage_DefaultDoubleNan    = float64(math.NaN())
+)
 
 func (x *FieldTestMessage) Reset() {
 	*x = FieldTestMessage{}
diff --git a/internal/testprotos/benchmarks/datasets/google_message1/proto2/benchmark_message1_proto2.pb.go b/internal/testprotos/benchmarks/datasets/google_message1/proto2/benchmark_message1_proto2.pb.go
index 41d2a0c..0d206e9 100644
--- a/internal/testprotos/benchmarks/datasets/google_message1/proto2/benchmark_message1_proto2.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message1/proto2/benchmark_message1_proto2.pb.go
@@ -64,30 +64,33 @@
 	Field131      *int32                    `protobuf:"varint,131,opt,name=field131,def=0" json:"field131,omitempty"`
 }
 
-const Default_GoogleMessage1_Field80 bool = false
-const Default_GoogleMessage1_Field81 bool = true
-const Default_GoogleMessage1_Field6 int32 = 0
-const Default_GoogleMessage1_Field59 bool = false
-const Default_GoogleMessage1_Field130 int32 = 0
-const Default_GoogleMessage1_Field12 bool = true
-const Default_GoogleMessage1_Field17 bool = true
-const Default_GoogleMessage1_Field13 bool = true
-const Default_GoogleMessage1_Field14 bool = true
-const Default_GoogleMessage1_Field104 int32 = 0
-const Default_GoogleMessage1_Field100 int32 = 0
-const Default_GoogleMessage1_Field101 int32 = 0
-const Default_GoogleMessage1_Field29 int32 = 0
-const Default_GoogleMessage1_Field30 bool = false
-const Default_GoogleMessage1_Field60 int32 = -1
-const Default_GoogleMessage1_Field271 int32 = -1
-const Default_GoogleMessage1_Field272 int32 = -1
-const Default_GoogleMessage1_Field23 int32 = 0
-const Default_GoogleMessage1_Field24 bool = false
-const Default_GoogleMessage1_Field25 int32 = 0
-const Default_GoogleMessage1_Field67 int32 = 0
-const Default_GoogleMessage1_Field128 int32 = 0
-const Default_GoogleMessage1_Field129 string = "xxxxxxxxxxxxxxxxxxxxx"
-const Default_GoogleMessage1_Field131 int32 = 0
+// Default values for GoogleMessage1 fields.
+const (
+	Default_GoogleMessage1_Field80  = bool(false)
+	Default_GoogleMessage1_Field81  = bool(true)
+	Default_GoogleMessage1_Field6   = int32(0)
+	Default_GoogleMessage1_Field59  = bool(false)
+	Default_GoogleMessage1_Field130 = int32(0)
+	Default_GoogleMessage1_Field12  = bool(true)
+	Default_GoogleMessage1_Field17  = bool(true)
+	Default_GoogleMessage1_Field13  = bool(true)
+	Default_GoogleMessage1_Field14  = bool(true)
+	Default_GoogleMessage1_Field104 = int32(0)
+	Default_GoogleMessage1_Field100 = int32(0)
+	Default_GoogleMessage1_Field101 = int32(0)
+	Default_GoogleMessage1_Field29  = int32(0)
+	Default_GoogleMessage1_Field30  = bool(false)
+	Default_GoogleMessage1_Field60  = int32(-1)
+	Default_GoogleMessage1_Field271 = int32(-1)
+	Default_GoogleMessage1_Field272 = int32(-1)
+	Default_GoogleMessage1_Field23  = int32(0)
+	Default_GoogleMessage1_Field24  = bool(false)
+	Default_GoogleMessage1_Field25  = int32(0)
+	Default_GoogleMessage1_Field67  = int32(0)
+	Default_GoogleMessage1_Field128 = int32(0)
+	Default_GoogleMessage1_Field129 = string("xxxxxxxxxxxxxxxxxxxxx")
+	Default_GoogleMessage1_Field131 = int32(0)
+)
 
 func (x *GoogleMessage1) Reset() {
 	*x = GoogleMessage1{}
@@ -429,15 +432,18 @@
 	Field300      *uint64 `protobuf:"varint,300,opt,name=field300" json:"field300,omitempty"`
 }
 
-const Default_GoogleMessage1SubMessage_Field1 int32 = 0
-const Default_GoogleMessage1SubMessage_Field2 int32 = 0
-const Default_GoogleMessage1SubMessage_Field3 int32 = 0
-const Default_GoogleMessage1SubMessage_Field12 bool = true
-const Default_GoogleMessage1SubMessage_Field19 int32 = 2
-const Default_GoogleMessage1SubMessage_Field20 bool = true
-const Default_GoogleMessage1SubMessage_Field28 bool = true
-const Default_GoogleMessage1SubMessage_Field23 bool = false
-const Default_GoogleMessage1SubMessage_Field206 bool = false
+// Default values for GoogleMessage1SubMessage fields.
+const (
+	Default_GoogleMessage1SubMessage_Field1   = int32(0)
+	Default_GoogleMessage1SubMessage_Field2   = int32(0)
+	Default_GoogleMessage1SubMessage_Field3   = int32(0)
+	Default_GoogleMessage1SubMessage_Field12  = bool(true)
+	Default_GoogleMessage1SubMessage_Field19  = int32(2)
+	Default_GoogleMessage1SubMessage_Field20  = bool(true)
+	Default_GoogleMessage1SubMessage_Field28  = bool(true)
+	Default_GoogleMessage1SubMessage_Field23  = bool(false)
+	Default_GoogleMessage1SubMessage_Field206 = bool(false)
+)
 
 func (x *GoogleMessage1SubMessage) Reset() {
 	*x = GoogleMessage1SubMessage{}
diff --git a/internal/testprotos/benchmarks/datasets/google_message2/benchmark_message2.pb.go b/internal/testprotos/benchmarks/datasets/google_message2/benchmark_message2.pb.go
index 9d0e509..01e668d 100644
--- a/internal/testprotos/benchmarks/datasets/google_message2/benchmark_message2.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message2/benchmark_message2.pb.go
@@ -53,21 +53,24 @@
 	Field206      *bool                    `protobuf:"varint,206,opt,name=field206,def=0" json:"field206,omitempty"`
 }
 
-const Default_GoogleMessage2_Field75 bool = false
-const Default_GoogleMessage2_Field21 int32 = 0
-const Default_GoogleMessage2_Field109 int32 = 0
-const Default_GoogleMessage2_Field210 int32 = 0
-const Default_GoogleMessage2_Field211 int32 = 0
-const Default_GoogleMessage2_Field212 int32 = 0
-const Default_GoogleMessage2_Field213 int32 = 0
-const Default_GoogleMessage2_Field216 int32 = 0
-const Default_GoogleMessage2_Field217 int32 = 0
-const Default_GoogleMessage2_Field218 int32 = 0
-const Default_GoogleMessage2_Field220 int32 = 0
-const Default_GoogleMessage2_Field221 int32 = 0
-const Default_GoogleMessage2_Field222 float32 = 0
-const Default_GoogleMessage2_Field205 bool = false
-const Default_GoogleMessage2_Field206 bool = false
+// Default values for GoogleMessage2 fields.
+const (
+	Default_GoogleMessage2_Field75  = bool(false)
+	Default_GoogleMessage2_Field21  = int32(0)
+	Default_GoogleMessage2_Field109 = int32(0)
+	Default_GoogleMessage2_Field210 = int32(0)
+	Default_GoogleMessage2_Field211 = int32(0)
+	Default_GoogleMessage2_Field212 = int32(0)
+	Default_GoogleMessage2_Field213 = int32(0)
+	Default_GoogleMessage2_Field216 = int32(0)
+	Default_GoogleMessage2_Field217 = int32(0)
+	Default_GoogleMessage2_Field218 = int32(0)
+	Default_GoogleMessage2_Field220 = int32(0)
+	Default_GoogleMessage2_Field221 = int32(0)
+	Default_GoogleMessage2_Field222 = float32(0)
+	Default_GoogleMessage2_Field205 = bool(false)
+	Default_GoogleMessage2_Field206 = bool(false)
+)
 
 func (x *GoogleMessage2) Reset() {
 	*x = GoogleMessage2{}
@@ -323,9 +326,12 @@
 	Field11       *int64   `protobuf:"varint,11,opt,name=field11" json:"field11,omitempty"`
 }
 
-const Default_GoogleMessage2GroupedMessage_Field3 float32 = 0
-const Default_GoogleMessage2GroupedMessage_Field6 bool = true
-const Default_GoogleMessage2GroupedMessage_Field7 bool = false
+// Default values for GoogleMessage2GroupedMessage fields.
+const (
+	Default_GoogleMessage2GroupedMessage_Field3 = float32(0)
+	Default_GoogleMessage2GroupedMessage_Field6 = bool(true)
+	Default_GoogleMessage2GroupedMessage_Field7 = bool(false)
+)
 
 func (x *GoogleMessage2GroupedMessage) Reset() {
 	*x = GoogleMessage2GroupedMessage{}
@@ -453,7 +459,10 @@
 	Field31       *GoogleMessage2GroupedMessage `protobuf:"bytes,31,opt,name=field31" json:"field31,omitempty"`
 }
 
-const Default_GoogleMessage2_Group1_Field20 int32 = 0
+// Default values for GoogleMessage2_Group1 fields.
+const (
+	Default_GoogleMessage2_Group1_Field20 = int32(0)
+)
 
 func (x *GoogleMessage2_Group1) Reset() {
 	*x = GoogleMessage2_Group1{}
diff --git a/internal/testprotos/test/test.pb.go b/internal/testprotos/test/test.pb.go
index 139c71e..80fc920 100644
--- a/internal/testprotos/test/test.pb.go
+++ b/internal/testprotos/test/test.pb.go
@@ -333,25 +333,30 @@
 	OneofField isTestAllTypes_OneofField `protobuf_oneof:"oneof_field"`
 }
 
-const Default_TestAllTypes_DefaultInt32 int32 = 81
-const Default_TestAllTypes_DefaultInt64 int64 = 82
-const Default_TestAllTypes_DefaultUint32 uint32 = 83
-const Default_TestAllTypes_DefaultUint64 uint64 = 84
-const Default_TestAllTypes_DefaultSint32 int32 = -85
-const Default_TestAllTypes_DefaultSint64 int64 = 86
-const Default_TestAllTypes_DefaultFixed32 uint32 = 87
-const Default_TestAllTypes_DefaultFixed64 uint64 = 88
-const Default_TestAllTypes_DefaultSfixed32 int32 = 89
-const Default_TestAllTypes_DefaultSfixed64 int64 = -90
-const Default_TestAllTypes_DefaultFloat float32 = 91.5
-const Default_TestAllTypes_DefaultDouble float64 = 92000
-const Default_TestAllTypes_DefaultBool bool = true
-const Default_TestAllTypes_DefaultString string = "hello"
+// Default values for TestAllTypes fields.
+const (
+	Default_TestAllTypes_DefaultInt32       = int32(81)
+	Default_TestAllTypes_DefaultInt64       = int64(82)
+	Default_TestAllTypes_DefaultUint32      = uint32(83)
+	Default_TestAllTypes_DefaultUint64      = uint64(84)
+	Default_TestAllTypes_DefaultSint32      = int32(-85)
+	Default_TestAllTypes_DefaultSint64      = int64(86)
+	Default_TestAllTypes_DefaultFixed32     = uint32(87)
+	Default_TestAllTypes_DefaultFixed64     = uint64(88)
+	Default_TestAllTypes_DefaultSfixed32    = int32(89)
+	Default_TestAllTypes_DefaultSfixed64    = int64(-90)
+	Default_TestAllTypes_DefaultFloat       = float32(91.5)
+	Default_TestAllTypes_DefaultDouble      = float64(92000)
+	Default_TestAllTypes_DefaultBool        = bool(true)
+	Default_TestAllTypes_DefaultString      = string("hello")
+	Default_TestAllTypes_DefaultNestedEnum  = TestAllTypes_BAR
+	Default_TestAllTypes_DefaultForeignEnum = ForeignEnum_FOREIGN_BAR
+)
 
-var Default_TestAllTypes_DefaultBytes []byte = []byte("world")
-
-const Default_TestAllTypes_DefaultNestedEnum TestAllTypes_NestedEnum = TestAllTypes_BAR
-const Default_TestAllTypes_DefaultForeignEnum ForeignEnum = ForeignEnum_FOREIGN_BAR
+// Default values for TestAllTypes fields.
+var (
+	Default_TestAllTypes_DefaultBytes = []byte("world")
+)
 
 func (x *TestAllTypes) Reset() {
 	*x = TestAllTypes{}
diff --git a/types/descriptorpb/descriptor.pb.go b/types/descriptorpb/descriptor.pb.go
index 3443d94..5a40ce1 100644
--- a/types/descriptorpb/descriptor.pb.go
+++ b/types/descriptorpb/descriptor.pb.go
@@ -1175,8 +1175,11 @@
 	ServerStreaming *bool `protobuf:"varint,6,opt,name=server_streaming,json=serverStreaming,def=0" json:"server_streaming,omitempty"`
 }
 
-const Default_MethodDescriptorProto_ClientStreaming bool = false
-const Default_MethodDescriptorProto_ServerStreaming bool = false
+// Default values for MethodDescriptorProto fields.
+const (
+	Default_MethodDescriptorProto_ClientStreaming = bool(false)
+	Default_MethodDescriptorProto_ServerStreaming = bool(false)
+)
 
 func (x *MethodDescriptorProto) Reset() {
 	*x = MethodDescriptorProto{}
@@ -1338,15 +1341,18 @@
 	UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
 }
 
-const Default_FileOptions_JavaMultipleFiles bool = false
-const Default_FileOptions_JavaStringCheckUtf8 bool = false
-const Default_FileOptions_OptimizeFor FileOptions_OptimizeMode = FileOptions_SPEED
-const Default_FileOptions_CcGenericServices bool = false
-const Default_FileOptions_JavaGenericServices bool = false
-const Default_FileOptions_PyGenericServices bool = false
-const Default_FileOptions_PhpGenericServices bool = false
-const Default_FileOptions_Deprecated bool = false
-const Default_FileOptions_CcEnableArenas bool = false
+// Default values for FileOptions fields.
+const (
+	Default_FileOptions_JavaMultipleFiles   = bool(false)
+	Default_FileOptions_JavaStringCheckUtf8 = bool(false)
+	Default_FileOptions_OptimizeFor         = FileOptions_SPEED
+	Default_FileOptions_CcGenericServices   = bool(false)
+	Default_FileOptions_JavaGenericServices = bool(false)
+	Default_FileOptions_PyGenericServices   = bool(false)
+	Default_FileOptions_PhpGenericServices  = bool(false)
+	Default_FileOptions_Deprecated          = bool(false)
+	Default_FileOptions_CcEnableArenas      = bool(false)
+)
 
 func (x *FileOptions) Reset() {
 	*x = FileOptions{}
@@ -1591,9 +1597,12 @@
 	UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
 }
 
-const Default_MessageOptions_MessageSetWireFormat bool = false
-const Default_MessageOptions_NoStandardDescriptorAccessor bool = false
-const Default_MessageOptions_Deprecated bool = false
+// Default values for MessageOptions fields.
+const (
+	Default_MessageOptions_MessageSetWireFormat         = bool(false)
+	Default_MessageOptions_NoStandardDescriptorAccessor = bool(false)
+	Default_MessageOptions_Deprecated                   = bool(false)
+)
 
 func (x *MessageOptions) Reset() {
 	*x = MessageOptions{}
@@ -1734,11 +1743,14 @@
 	UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
 }
 
-const Default_FieldOptions_Ctype FieldOptions_CType = FieldOptions_STRING
-const Default_FieldOptions_Jstype FieldOptions_JSType = FieldOptions_JS_NORMAL
-const Default_FieldOptions_Lazy bool = false
-const Default_FieldOptions_Deprecated bool = false
-const Default_FieldOptions_Weak bool = false
+// Default values for FieldOptions fields.
+const (
+	Default_FieldOptions_Ctype      = FieldOptions_STRING
+	Default_FieldOptions_Jstype     = FieldOptions_JS_NORMAL
+	Default_FieldOptions_Lazy       = bool(false)
+	Default_FieldOptions_Deprecated = bool(false)
+	Default_FieldOptions_Weak       = bool(false)
+)
 
 func (x *FieldOptions) Reset() {
 	*x = FieldOptions{}
@@ -1894,7 +1906,10 @@
 	UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
 }
 
-const Default_EnumOptions_Deprecated bool = false
+// Default values for EnumOptions fields.
+const (
+	Default_EnumOptions_Deprecated = bool(false)
+)
 
 func (x *EnumOptions) Reset() {
 	*x = EnumOptions{}
@@ -1967,7 +1982,10 @@
 	UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
 }
 
-const Default_EnumValueOptions_Deprecated bool = false
+// Default values for EnumValueOptions fields.
+const (
+	Default_EnumValueOptions_Deprecated = bool(false)
+)
 
 func (x *EnumValueOptions) Reset() {
 	*x = EnumValueOptions{}
@@ -2033,7 +2051,10 @@
 	UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
 }
 
-const Default_ServiceOptions_Deprecated bool = false
+// Default values for ServiceOptions fields.
+const (
+	Default_ServiceOptions_Deprecated = bool(false)
+)
 
 func (x *ServiceOptions) Reset() {
 	*x = ServiceOptions{}
@@ -2100,8 +2121,11 @@
 	UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
 }
 
-const Default_MethodOptions_Deprecated bool = false
-const Default_MethodOptions_IdempotencyLevel MethodOptions_IdempotencyLevel = MethodOptions_IDEMPOTENCY_UNKNOWN
+// Default values for MethodOptions fields.
+const (
+	Default_MethodOptions_Deprecated       = bool(false)
+	Default_MethodOptions_IdempotencyLevel = MethodOptions_IDEMPOTENCY_UNKNOWN
+)
 
 func (x *MethodOptions) Reset() {
 	*x = MethodOptions{}