いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-297 (bytesパッケージにCutPrefix,CutSuffixが追加)(Go 1.20)

類似記事

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のおすすめ書籍

Go言語による並行処理

Go言語による並行処理

Amazon


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。