slice expressionsを使用してください。不完全な入力に対して正しい出力を提供する堅牢なコードを記述する必要があります。例えば、
package main
import "fmt"
func trimQuotes(s string) string {
if len(s) >= 2 {
if s[0] == '"' && s[len(s)-1] == '"' {
return s[1 : len(s)-1]
}
}
return s
}
func main() {
tests := []string{
`"hello""world"`,
`"""hello"""`,
`"`,
`""`,
`"""`,
`goodbye"`,
`"goodbye"`,
`goodbye"`,
`good"bye`,
}
for _, test := range tests {
fmt.Printf("`%s` -> `%s`\n", test, trimQuotes(test))
}
}
出力:一度文字列への変換[]バイト中の[]バイト変換と、一度に文字列で
`"hello""world"` -> `hello""world`
`"""hello"""` -> `""hello""`
`"` -> `"`
`""` -> ``
`"""` -> `"`
`goodbye"` -> `goodbye"`
`"goodbye"` -> `goodbye`
`goodbye"` -> `goodbye"`
`good"bye` -> `good"bye`
この回答のコピー2倍のデータ、。 –
@CeriseLimónありがとう、私はまだ文字列と[]バイトの関係を学んでいます。私はコピーがいつ起こるのか、そうでないのかを説明するページを持っていましたが、私はそれを間違って配置しました。あなたは資源を持っていますか? – Schwern
文字列のバッキング配列は不変であり、[]バイトのバッキング配列は可変です。あるタイプから他のタイプへの変換時に、バッキング配列をコピーする必要があります。つまり、文字列の存続期間中に[]バイトに変更がないことをコンパイラが証明できる場合があります。これらの場合、文字列は[]バイトのバッキング配列を共有します。そのようなケースの1つは[]バイトを使ってmap [string] sometype: 'm [string(p)]'の値を検索することです。変換から返される文字列は、バッキング配列を[]バイトpと共有します。 –