いろいろ備忘録日記

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

Goメモ-336 (append()の特殊な仕様)(append([]byte, string...))

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。知らなかったので忘れない内にメモメモ。。。

append() のドキュメントをたまたま参照していたら、以下のような記載があるのを発見。

As a special case, it is legal to append a string to a byte slice, like this:

slice = append([]byte("hello "), "world"...)

バイトスライスに文字列を直接追加できるんですね。知らなかったです。

Goで文字列は単なるバイト列なので ... で指定してるから、バイトを追加しているってことになるからですね。

試してみる

package slices

import "github.com/devlights/gomy/output"

// AppendSpecialBehavior は、append() を利用する際の特別な挙動に付いてのサンプルです。
//
// # REFERENCES
//   - https://pkg.go.dev/builtin@go1.20.6#append
func AppendSpecialBehavior() error {
    //
    // append() を利用する際、以下のパターンは特別扱いで型が異なっているが動作する
    //   - byteスライスに対して文字列を追加
    //
    var (
        sl = make([]byte, 0)
    )

    sl = append(sl, []byte{0x61, 0x62, 0x63, 0x20}...) // OK
    sl = append(sl, "helloworld"...)                   // これもOK

    output.Stdoutf("[sl]", "%s/n", sl)

    return nil
}

実行すると以下のようになります。

gitpod /workspace/try-golang (master) $ task
task: [run] go run . -onetime

ENTER EXAMPLE NAME: slice_append_special_behavior

[Name] "slice_append_special_behavior"
[sl]                 abc helloworld/n

[Elapsed] 11.16µs

参考情報

builtin package - builtin - Go Packages

Goのおすすめ書籍

Go言語による並行処理

Go言語による並行処理

Amazon


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

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