type FieldSpec … func (fs FieldSpec) String() string { … } // If true, the primary key is the same, but other fields might not be. func (fs FieldSpec) effectivelyEquals(other FieldSpec) bool { … } type FsSlice … func (s FsSlice) Len() int { … } func (s FsSlice) Swap(i, j int) { … } func (s FsSlice) Less(i, j int) bool { … } // DeepCopy returns a new copy of FsSlice func (s FsSlice) DeepCopy() FsSlice { … } // MergeAll merges the argument into this, returning the result. // Items already present are ignored. // Items that conflict (primary key matches, but remain data differs) // result in an error. func (s FsSlice) MergeAll(incoming FsSlice) (result FsSlice, err error) { … } // MergeOne merges the argument into this, returning the result. // If the item's primary key is already present, and there are no // conflicts, it is ignored (we don't want duplicates). // If there is a conflict, the merge fails. func (s FsSlice) MergeOne(x FieldSpec) (FsSlice, error) { … } func (s FsSlice) index(fs FieldSpec) int { … }