Goで文字列をフォーマットする方法

文字列は多くの場合、書かれたテキストで構成されているため、句読点、改行、インデントを介して文字列を人間にとって読みやすくするために、文字列の外観をより詳細に制御したい場合があります。

このチュートリアルでは、Go文字列を使用して、すべての出力テキストが正しくフォーマットされていることを確認する方法のいくつかを検討します。

文字列リテラル

まず、_string literal_と_string value_を区別しましょう。 文字列リテラルは、引用符を含むコンピュータープログラムのソースコードに表示されるものです。 文字列値は、 `+ fmt.Println +`関数を呼び出してプログラムを実行したときに表示されるものです。

「Hello、World!」プログラムでは、文字列リテラルは `" Hello、World! "`で、文字列値は引用符なしの `+ Hello、World!+`です。 文字列値は、Goプログラムを実行したときにターミナルウィンドウに出力として表示されるものです。

ただし、ソースを引用する場合など、一部の文字列値には引用符を含める必要があります。 文字列リテラルと文字列値は同等ではないため、文字列値が意図したとおりに表示されるように、文字列リテラルに追加の書式設定を追加する必要がしばしばあります。

引用

Go内で逆引用符( + \ + )または二重引用符( + "+`)を使用できるため、逆引用符で囲まれた文字列内に二重引用符を使用して、文字列内に引用符を埋め込むのは簡単です。

`Sammy says, "Hello!"`

または、逆引用符を使用するには、文字列を二重引用符で囲むことができます。

"Sammy likes the `fmt` package for formatting strings.."

逆引用符と二重引用符を組み合わせる方法で、文字列内の引用符と逆引用符の表示を制御できます。

Goで逆引用符を使用すると「+ raw」文字列リテラルが作成され、二重引用符を使用すると「+ interpreted」文字列リテラルが作成されることに注意してください。 違いの詳細については、https://www.digitalocean.com/community/tutorials/an-introduction-to-working-with-strings-in-go [Goでの文字列の操作の概要]チュートリアルを参照してください。

エスケープ文字

文字列をフォーマットする別の方法は、_エスケープ文字_を使用することです。 エスケープ文字は、次の文字が特別な意味を持つことをコードに伝えるために使用されます。 エスケープ文字はすべて、バックスラッシュキー( + \ +)から始まり、文字列内の別の文字と組み合わせて、特定の文字列を特定の方法でフォーマットします。

一般的なエスケープ文字のリストを次に示します。

Escape Character How it formats

\

Backslash

"

Double Quote

\n

Line Break

\t

Tab (horizontal indentation)

エスケープ文字を使用して、上記の引用符の例に引用符を追加しますが、今回は文字列を示すために二重引用符を使用します。

fmt.Println("Sammy says, \"Hello!\"")
OutputSammy says, "Hello!"

エスケープ文字 `+ \" + `を使用することにより、二重引用符を使用して、二重引用符で囲まれたテキストを含む文字列を囲むことができます。

エスケープ文字「+ \ n +」を使用して、EnterキーまたはReturnキーを押すことなく行を分割できます。

fmt.Println("This string\nspans multiple\nlines.")
OutputThis string
spans multiple
lines.

エスケープ文字も組み合わせることができます。 複数行の文字列を印刷し、項目別リストのタブ間隔を含めてみましょう。例:

fmt.Println("1.\tShark\n2.\tShrimp\n10.\tSquid")
Output1.      Shark
2.      Shrimp
10.     Squid

`+ \ t +`エスケープ文字で提供される水平インデントは、前の例の2番目の列内での整列を保証し、出力を人間にとって非常に読みやすくします。

エスケープ文字は、文字列に追加の書式設定を追加するために使用されますが、これは達成が困難または不可能な場合があります。 エスケープ文字がないと、 + Sammyが言う「\ fmt \ `パッケージを使用したい」という文字列を作成できません。

複数行

文字列を複数行に印刷すると、テキストが人間にとって読みやすくなります。 複数の行を使用して、文字列をきれいで整然としたテキストにグループ化し、文字としてフォーマットするか、詩や歌の歌詞の改行を維持するために使用できます。

複数行にわたる文字列を作成するには、逆引用符を使用して文字列を囲みます。 これは行の戻り値を保持しますが、 `+ raw +`文字列リテラルも作成することに注意してください。

`
This string is on
multiple lines
within three single
quotes on either side.
`

これを印刷すると、先頭と末尾のリターンがあることがわかります。

Output
This string is on
multiple lines
within three single
quotes on either side.

これを回避するには、バッククォートの直後に最初の行を入れ、バッククォートで最後を終了する必要があります。

`This string is on
multiple lines
within three single
quotes on either side.`

解釈された文字列リテラルを作成する必要がある場合、これは二重引用符と `+`演算子で実行できますが、独自の改行を挿入する必要があります。

"This string is on\n" +
"multiple lines\n" +
"within three single\n" +
"quotes on either side."

逆引用符を使用すると、長いテキストの印刷と読み取りが簡単になりますが、解釈された文字列リテラルが必要な場合は、二重引用符を使用する必要があります。

生の文字列リテラル

文字列内で特別な書式設定が必要ない場合はどうなりますか? たとえば、意図的にバックスラッシュを使用するコンピューターコードの文字列を比較または評価する必要がある場合があるため、Goでエスケープ文字として使用しないようにします。

  • raw *文字列リテラルは、エスケープ文字を含む文字列内のすべてのフォーマットを無視するようGoに指示します。

文字列を逆引用符で囲むことにより、生の文字列を作成します。

fmt.Println(`Sammy says,\"The balloon\'s color is red.\"`)
OutputSammy says,\"The balloon\'s color is red.\"

特定の文字列をバッククォートで囲んで生の文字列を作成することにより、エスケープ文字として使用されるバックスラッシュやその他の文字を保持できます。

結論

このチュートリアルでは、Goで文字列を操作してテキストをフォーマットするいくつかの方法について説明しました。 エスケープ文字や生の文字列などの技術を使用することにより、プログラムの文字列が画面上で正しくレンダリングされ、エンドユーザーがすべての出力テキストを簡単に読むことができるようになります。