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

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

文字列リテラル

まず、文字列リテラル文字列値を区別しましょう。 文字列リテラルは、引用符を含め、コンピュータプログラムのソースコードに表示されるものです。 文字列値は、 fmt.Println 機能し、プログラムを実行します。

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

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

引用

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

`Sammy says, "Hello!"`

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

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

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

Goで逆引用符を使用すると、 raw 文字列リテラル、および二重引用符を使用すると、 interpreted 文字列リテラル。 違いの詳細については、Goチュートリアルでの文字列の操作の概要をお読みください。

エスケープ文字

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

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

エスケープ文字 フォーマット方法
\\ バックスラッシュ
\” 二重引用符
\ n 改行
\ t タブ(水平インデント)

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

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

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

使用できます \n EnterキーまたはReturnキーを押さずに文字をエスケープして行を区切ります。

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

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

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

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

エスケープ文字は、文字列に追加の書式を追加するために使用されますが、これは実現が困難または不可能な場合があります。 エスケープ文字がないと、文字列を作成できません。 Sammy says, "I like to use the `fmt` package".

複数行

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

複数行にまたがる文字列を作成するには、文字列を囲むために逆引用符を使用します。 これによりラインリターンは保持されますが、 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.\"`)
Output
Sammy says,\"The balloon\'s color is red.\"

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

結論

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