類似記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。
Go 1.20 にて、bytesパッケージに CutPrefix と CutSuffix が追加されました。同様に strings パッケージにも同じ名前の関数が追加されていますね。
Go は、バイト配列(バイトスライス)の扱いがとてもやりやすいので、このようなヘルパー関数が追加されるのは個人的に嬉しいです。
試してみる
bytes.{CutPrefix,CutSuffix}
package byteop import ( "bytes" "errors" "github.com/devlights/gomy/output" ) // CutPrefixSuffix は、Go 1.20 で追加された bytes.{CutPrefix,CutSuffix} のサンプルです. // // bytes.{CutPrefix,CutSuffix} と strings.{CutPrefix,CutSuffix} は対で追加されている。 // // # REFERENCES // - https://pkg.go.dev/bytes@go1.20.2#CutPrefix // - https://pkg.go.dev/bytes@go1.20.2#CutSuffix func CutPrefixSuffix() error { var ( prefix = []byte("hello") suffix = []byte("world") body = []byte("12345") sep = []byte{} data = bytes.Join([][]byte{prefix, body, suffix}, sep) ) cut1, found := bytes.CutPrefix(data, prefix) if !found { return errors.New("prefix is not found") } cut2, found := bytes.CutSuffix(data, suffix) if !found { return errors.New("suffix is not found") } output.Stdoutl("[CutPrefix]", cut1, string(cut1)) output.Stdoutl("[CutSuffix]", cut2, string(cut2)) return nil }
実行すると、以下のようになります。
gitpod /workspace/try-golang (master) $ task task: [run] go run . -onetime ENTER EXAMPLE NAME: byteop_cut_prefix_suffix [Name] "byteop_cut_prefix_suffix" [CutPrefix] [49 50 51 52 53 119 111 114 108 100] 12345world [CutSuffix] [104 101 108 108 111 49 50 51 52 53] hello12345 [Elapsed] 59.06µs
strings.{CutPrefix,CutSuffix}
package strs import ( "errors" "strings" "github.com/devlights/gomy/output" ) // CutPrefixSuffix は、Go 1.20 で追加された strings.{CutPrefix,CutSuffix} のサンプルです. // // bytes.{CutPrefix,CutSuffix} と strings.{CutPrefix,CutSuffix} は対で追加されている。 // // # REFERENCES // - https://pkg.go.dev/strings@go1.20.2#CutPrefix // - https://pkg.go.dev/strings@go1.20.2#CutSuffix func CutPrefixSuffix() error { var ( prefix = "hello" suffix = "world" body = "12345" sep = "" data = strings.Join([]string{prefix, body, suffix}, sep) ) cut1, found := strings.CutPrefix(data, prefix) if !found { return errors.New("prefix is not found") } cut2, found := strings.CutSuffix(data, suffix) if !found { return errors.New("suffix is not found") } output.Stdoutl("[CutPrefix]", cut1) output.Stdoutl("[CutSuffix]", cut2) return nil }
実行すると、以下のようになります。
gitpod /workspace/try-golang (master) $ task task: [run] go run . -onetime ENTER EXAMPLE NAME: string_cut_prefix_suffix [Name] "string_cut_prefix_suffix" [CutPrefix] 12345world [CutSuffix] hello12345 [Elapsed] 46.49µs
参考情報
https://pkg.go.dev/bytes@go1.20.2#CutPrefix
https://pkg.go.dev/bytes@go1.20.2#CutSuffix
https://pkg.go.dev/strings@go1.20.2#CutPrefix
https://pkg.go.dev/strings@go1.20.2#CutSuffix
Goのおすすめ書籍
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。