package main import ( "go/token" "strings" "unicode" ) func goName(s string) string { var out strings.Builder for _, part := range strings.Split(s, "_") { if part == "" { continue } if part == strings.ToUpper(part) { part = strings.ToLower(part) } r := []rune(part) r[0] = unicode.ToUpper(r[0]) out.WriteString(string(r)) } name := out.String() if name != "" && name[0] >= '0' && name[0] <= '9' { name = "X" + name } if token.Lookup(name).IsKeyword() { name += "_" } return name } func paramName(s string) string { name := goName(s) if name == "" { return name } r := []rune(name) r[0] = unicode.ToLower(r[0]) name = string(r) if token.Lookup(name).IsKeyword() { name += "_" } return name }