code: func NewCustomColumnsPrinterFromSpec(spec string, decoder runtime.Decoder) (*CustomColumnsPrinter, error) {
  	if len(spec) == 0 {
  		return nil, fmt.Errorf("custom-columns format specified but no custom columns given")
  	}
  	parts := strings.Split(spec, ",")
  	columns := make([]Column, len(parts))
  	for ix := range parts {
  		colSpec := strings.Split(parts[ix], ":")
  		if len(colSpec) != 2 {
  			return nil, fmt.Errorf("unexpected custom-columns spec: %s, expected <header>:<json-path-expr>", parts[ix])
  		}
  		spec, err := massageJSONPath(colSpec[1])
  		if err != nil {
  			return nil, err
  		}
  		columns[ix] = Column{Header: colSpec[0], FieldSpec: spec}
  	}
  	return &CustomColumnsPrinter{Columns: columns, Decoder: decoder}, nil
  }
docs: // NewCustomColumnsPrinterFromSpec creates a custom columns printer from a comma separated list of <header>:<jsonpath-field-spec> pairs.
  // e.g. NAME:metadata.name,API_VERSION:apiVersion creates a printer that prints:
  //
  //      NAME               API_VERSION
  //      foo                bar