code: func CamelCaseToUnderscore(str string) string {
  	var output []rune
  	var segment []rune
  	for _, r := range str {
  
  		// not treat number as separate segment
  		if !unicode.IsLower(r) && string(r) != "_" && !unicode.IsNumber(r) {
  			output = addSegment(output, segment)
  			segment = nil
  		}
  		segment = append(segment, unicode.ToLower(r))
  	}
  	output = addSegment(output, segment)
  	return string(output)
  }
docs: // CamelCaseToUnderscore converts from camel case form to underscore separated form.
  // Ex.: MyFunc => my_func