deepcopy-gen

command
v0.0.11 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 12, 2025 License: MIT Imports: 7 Imported by: 0

README

deepcopy-gen

install

go install github.com/ravinggo/tools/deepcopy-gen@latest
generate package
// +k8s:deepcopy-gen=package
Ignore a struct
// +k8s:deepcopy-gen=false
More information in the output_tests directory

command help

 deepcopy-gen --help
Usage of B:\opensource\tools\deepcopy-gen\deepcopy-gen:
      --add_dir_header                   If true, adds the file directory to the header of the log messages
      --alsologtostderr                  log to standard error as well as files (no effect when -logtostderr=true)
      --bounding-dirs strings            Comma-separated list of import paths which bound the types for which deep-copies will be generated.
      --go-header-file string            the path to a file containing boilerplate header text; the string "YEAR" will be replaced with the current 4-digit year
      --log_backtrace_at traceLocation   when logging hits line file:N, emit a stack trace (default :0)
      --log_dir string                   If non-empty, write log files in this directory (no effect when -logtostderr=true)     
      --log_file string                  If non-empty, use this log file (no effect when -logtostderr=true)
      --log_file_max_size uint           Defines the maximum size a log file can grow to (no effect when -logtostderr=true). Unit is megabytes. If the value is 0, the maximum file size is unlimited. (default 1800)
      --logtostderr                      log to standard error instead of files (default true)
      --one_output                       If true, only write logs to their native severity level (vs also writing to each lower severity level; no effect when -logtostderr=true)
      --output-file string               the name of the file to be generated (default "generated.deepcopy.go")
      --skip_headers                     If true, avoid header prefixes in the log messages
      --skip_log_headers                 If true, avoid headers when opening log files (no effect when -logtostderr=true)       
      --stderrthreshold severity         logs at or above this threshold go to stderr when writing to files and stderr (no effect when -logtostderr=true or -alsologtostderr=true) (default 2)
      --use-pool                         use sync.Pool mode (default true)
  -v, --v Level                          number for the log level verbosity
      --vmodule moduleSpec               comma-separated list of pattern=N settings for file-filtered logging
pflag: help requested

example
deepcopy-gen --bounding-dirs=./output_tests/test --output-file zz_generated.deepcopy.go ./output_tests/test

NODE:

Struct1 has a reference type(slice,map,pointer) field. However, as the value type of Struct2 field Map1, it will cause additional allocation, which cannot be solved yet.
Please use Struct3 to use pointers
type Struct1 struct {
    Field1 []string //  
    Field2 int
} 

type Struct2 struct {
    Map1 map[string]Struct1
    Field2 int
}

type Struct3 struct {
    Map1 map[string]*Struct1
    Field2 int
}

Documentation

Overview

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 methods already exist (are predefined by the developer), they are used instead of generating new ones. Generated code will use standard value assignment whenever possible. If that is not possible it will try to call its own generated copy function for the type. Failing that, it will fall back on `conversion.Cloner.DeepCopy(val)` to make the copy. The resulting file will be stored in the same directory as the processed source package.

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
}

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:

// +k8s:deepcopy-gen=package

DeepCopy functions can be generated for individual types, rather than the entire package by specifying a comment on the type definition of the form:

// +k8s: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:

// +k8s:deepcopy-gen=false

Additional DeepCopyInterfaceName methods can be generated by specifying a comment on the type definition of the form:

// +k8s: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 "+k8s: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:

// +k8s:deepcopy-gen:nonpointer-interfaces=true

Directories

Path Synopsis
aliases
This is a test package.
This is a test package.
builtins
This is a test package.
This is a test package.
interfaces
This is a test package.
This is a test package.
maps
This is a test package.
This is a test package.
pointer
This is a test package.
This is a test package.
slices
This is a test package.
This is a test package.
structs
This is a test package.
This is a test package.
wholepkg
This is a test package.
This is a test package.
aliases
This is a test package.
This is a test package.
builtins
This is a test package.
This is a test package.
interfaces
This is a test package.
This is a test package.
maps
This is a test package.
This is a test package.
pointer
This is a test package.
This is a test package.
slices
This is a test package.
This is a test package.
structs
This is a test package.
This is a test package.
wholepkg
This is a test package.
This is a test package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL