github.com/metux/go-metabuild@v0.0.0-20240118143255-d9ed5ab697f9/util/strs/escape.go (about) 1 package strs 2 3 import ( 4 "fmt" 5 "strings" 6 ) 7 8 func StrEscC(in string) string { 9 sbEsc := strings.Builder{} 10 for idx := 0; idx < len(in); idx++ { 11 switch rune := in[idx]; rune { 12 case '"': 13 sbEsc.WriteString(`\"`) 14 case '\'': 15 sbEsc.WriteString(`\'`) 16 case '\n': 17 sbEsc.WriteString(`\n`) 18 case '\\': 19 sbEsc.WriteString(`\\`) 20 default: 21 if b := byte(rune); b > 127 { 22 sbEsc.WriteString(fmt.Sprintf(`\%o`, b)) 23 } else { 24 sbEsc.WriteString(string(rune)) 25 } 26 } 27 } 28 return sbEsc.String() 29 }