// deepcopy-gen is a tool for auto-generating DeepCopy functions. // // Given a list of input directories, it will generate DeepCopy and DeepCopyInto // methods that efficiently perform a full deep-copy of each type. If these // already exist (are predefined by the developer), they are used instead of // generating new ones. // // If interfaces are referenced in types, it is expected that corresponding // DeepCopyInterfaceName methods exist, e.g. DeepCopyObject for runtime.Object. // These can be predefined by the developer or generated through tags, see below. // They must be added to the interfaces themselves manually, e.g. // type Object interface { // ... // DeepCopyObject() Object // } // // All generation is governed by comment tags in the source. Any package may // request DeepCopy generation by including a comment in the file-comments of // one file, of the form: // // +bili:deepcopy-gen=package // // DeepCopy functions can be generated for individual types, rather than the // entire package by specifying a comment on the type definion of the form: // // +bili:deepcopy-gen=true // // When generating for a whole package, individual types may opt out of // DeepCopy generation by specifying a comment on the type definition of the form: // // +bili:deepcopy-gen=false // // Additional DeepCopyInterfaceName methods can be generated by sepcifying a // comment on the type definition of the form: // // +bili:deepcopy-gen:interfaces=k8s.io/kubernetes/runtime.Object,k8s.io/kubernetes/runtime.List // This leads to the generation of DeepCopyObject and DeepCopyList with the given // interfaces as return types. We say that the tagged type implements deepcopy for the // interfaces. // // The deepcopy funcs for interfaces using "+bili:deepcopy-gen:interfaces" use the pointer // of the type as receiver. For those special cases where the non-pointer object should // implement the interface, this can be done with: // // +bili:deepcopy-gen:nonpointer-interfaces=true package main import ( "flag" "go-common/app/tool/gengo/args" "go-common/app/tool/gengo/cmd/deepcopy-gen/generators" "github.com/golang/glog" ) func main() { arguments := args.Default() // Override defaults. arguments.OutputFileBaseName = "deepcopy_generated" // Custom args. customArgs := &generators.CustomArgs{} flag.CommandLine.Var(&customArgs.BoundingDirs, "bounding-dirs", "Comma-separated list of import paths which bound the types for which deep-copies will be generated.") arguments.CustomArgs = customArgs // Run it. if err := arguments.Execute( generators.NameSystems(), generators.DefaultNameSystem(), generators.Packages, ); err != nil { glog.Fatalf("Error: %v", err) } glog.V(2).Info("Completed successfully.") }