// Merge merges the src message into dst. // This assumes that dst and src of the same type and are non-nil. func (a *InternalMessageInfo) Merge(dst, src Message) { … } type mergeInfo … type mergeFieldInfo … var mergeInfoMap … var mergeInfoLock … func getMergeInfo(t reflect.Type) *mergeInfo { … } // merge merges src into dst assuming they are both of type *mi.typ. func (mi *mergeInfo) merge(dst, src pointer) { … } func (mi *mergeInfo) computeMergeInfo() { … }