type messageField … var messageFieldPool … type FieldRanger … type VisitField … // RangeFields iterates over the fields of fs according to the specified order. func RangeFields(fs FieldRanger, less FieldOrder, fn VisitField) { … } type mapEntry … var mapEntryPool … type EntryRanger … type VisitEntry … // RangeEntries iterates over the entries of es according to the specified order. func RangeEntries(es EntryRanger, less KeyOrder, fn VisitEntry) { … }