導入
Go言語で開発をしていると、正規表現のパターンやJSONのテンプレート、あるいはSQLクエリをソースコード内に直接記述することがよくあります。その際、通常のダブルクォート(”)を使うと、改行やバックスラッシュ(\)をすべてエスケープする必要があり、コードが非常に読みづらくなってしまいます。このような課題をスマートに解決するのが「raw文字列リテラル」です。
基礎知識
Go言語には、文字列を表現する方法として「解釈される文字列リテラル(ダブルクォート)」と「raw文字列リテラル(バッククォート)」の2種類があります。raw文字列リテラルとは、バッククォート(`)で囲まれた文字列のことで、内部のエスケープシーケンス(\n や \t など)が解釈されず、記述した文字がそのまま保持されます。
実装/解決策
raw文字列リテラルを使用するには、文字列をダブルクォートの代わりにバッククォート(`)で囲むだけです。これにより、バックスラッシュをエスケープする必要がなくなるため、正規表現やパスの記述、複数行にわたるテキストをそのままの形でコード内に埋め込むことができます。
サンプルプログラム
以下は、raw文字列リテラルを使用して、改行を含む複数行のJSON文字列を定義する例です。
package main
import "fmt"
func main() {
// raw文字列リテラルを使用すると、改行やインデントをそのまま記述できます
// ダブルクォートなら "\n" や "\"" と書く必要がある箇所も、そのままでOKです
jsonQuery := `
{
"user_id": 101,
"status": "active",
"description": "これは \"raw文字列\" のテストです。"
}
`
fmt.Println("出力結果:")
fmt.Println(jsonQuery)
}
応用・注意点
raw文字列リテラルを使用する上で、一つだけ注意すべき点があります。それは、バッククォート自体を文字列内に含めることができないという仕様です。もしバッククォートを含めたい場合は、通常の文字列連結(` + “`” + `)を行う必要があります。
また、ソースコードのインデントをそのまま文字列として保持してしまうため、関数内でインデントを深くした状態でraw文字列リテラルを書くと、文字列内に不要なスペースが入ってしまいます。これを避けるためには、文字列を左端に寄せて書くか、標準ライブラリの text/textutil 等で整形する工夫が現場ではよく行われます。適切に使い分けることで、可読性の高いクリーンなコードを維持しましょう。

コメント