ホームページ > バックエンド開発 > Golang > AST ノードの Go 文字列リテラルから文字列値を抽出するにはどうすればよいですか?

AST ノードの Go 文字列リテラルから文字列値を抽出するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-07 16:51:11
オリジナル
753 人が閲覧しました

How to Extract the String Value from a Go String Literal in an AST Node?

Go 文字列リテラル コードから文字列値を取得する

Go 構文ツリー操作シナリオでは、文字列の値を抽出する必要がある場合があります。 ast.BasicLit ノードからのリテラル。このノードは文字列リテラル型を示しますが、その値は実際の文字列値ではなく Go コードとして表されます。この記事では、この課題の解決策について説明します。

解決策: strconv.Unquote()

strconv.Unquote() 関数が鍵となります。このニーズに応えるために。これにより、Go コードとして表された文字列リテラルを引用符で囲まれていない値に変換できます。ただし、strconv.Unquote() は引用符 (") で囲まれた文字列の引用符を解除するだけであることに注意することが重要です。したがって、ast.BasicLit ノードの文字列リテラルに引用符がない場合は、引用符を手動で追加する必要があります。 strconv.Unquote().

例を使用する前使用法:

import (
    "fmt"
    "strconv"
)

func main() {
    // String literal without quotation marks (will fail)
    str1 := "Hello"

    // String literal with quotation marks (valid)
    str2 := `"Hello world"`

    // Manually adding quotation marks to the first string
    str1 = strconv.Quote(str1)

    // Unquoting the string literals
    unqStr1, _ := strconv.Unquote(str1)
    unqStr2, _ := strconv.Unquote(str2)

    fmt.Println(unqStr1) // Output: Hello
    fmt.Println(unqStr2) // Output: Hello world
}
ログイン後にコピー

重要な注意事項:

  • strconv.Unquote() は引用符内の文字列の引用符を解除するだけです。
  • 文字列リテラルに特殊文字が含まれている場合 (例: line中断)、正しく処理するには、strconv.Quote()strconv.Unquote() の前に使用する必要があります。
  • 簡潔にするために、例の _ 戻り値は無視されます。 ; 実際の使用例では適切に処理してください。

以上がAST ノードの Go 文字列リテラルから文字列値を抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート