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