gen-atomicwrapper generates wrapper types around other atomic types.

    It supports plugging in functions which convert the value inside the atomic type to the user-facing value. For example,

    Given, atomic.Value and the functions,

    func packString(string) interface{}
    func unpackString(interface{}) string

    We can run the following command:

    gen-atomicwrapper -name String -wrapped Value \
      -type string -pack fromString -unpack tostring

    This wil generate approximately,

    type String struct{ v Value }
    func (s *String) Load() string {
      return unpackString(v.Load())
    func (s *String) Store(s string) {
      return s.v.Store(packString(s))

    The packing/unpacking logic allows the stored value to be different from the user-facing value.

    Without -pack and -unpack, the output will be cast to the target type, defaulting to the zero value.

    Source Files