English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Golang基本チュートリアル

Golang制御文

Golang関数 & メソッド

Golang構造体

Golangスライス & 配列

Golang文字列(String)

Golangポインタ

Golangインターフェース

Golang并发

Golang例外(Error)

Golang その他の雑項

Go 言語の文字列(String)

Go言語では、文字列はJava、c++、Pythonなど。これはUTFの変幅文字シーケンスであり、各文字はUTFでエンコードされています。-8エンコードの1または複数のバイトで表現されています。または言い換えれば、文字列は任意のバイト(ゼロの値を含むバイト)の不可変なリンクで、または文字列はUTFの読み取り専用のバイトスライスであり、文字列のバイトはUTFを使用してエンコードできます。-8エンコードでUnicodeテキストを表現しています。

UTF-8エンコード、Golangの文字列はテキストを含み、テキストは世界のどんな言語の混在もページの混乱や制限を引き起こしません。通常、文字列はダブルクォート””引用符、以下の例を参照してください:

//文字列の作成方法
package main 
  
import "fmt"
  
func main() { 
  
//作成および初期化
//文字列を含む変数
//ショートハンド宣言を使用
    My_value_1 := "Welcome to oldtoolbag.com"
  
    //varキーワードを使用して
    var My_value_2 string 
    My_value_2 = "w3codebox"
  
    //表示文字列 
    fmt.Println("String 1: ", My_value_1) 
    fmt.Println("String 2: ", My_value_2) 
}

出力:

String 1:  Welcome to oldtoolbag.com
String 2:  w3codebox

注意:文字列は空でなくてはなりませんが、nilではありません。

文字列リテラル

Go言語では、文字列リテラルは二つの異なる方法で作成されます:

  • ダブルクォート(“”):ここでは、文字列リテラルはダブルクォート(“”)で作成されます。この種の文字列リテラルは、以下の表に示されるエスケープシーケンスをサポートしますが、複数の行には及びません。この種の文字列リテラルはGolangプログラムで広く使用されています。

    エスケープシーケンス説明
    \\\アンダースコア(\)
    \000指定された3の8ビット8進数コードポイントのUnicode文字
    \’シングルクォート(')。文字文字にのみ許可
    \”ダブルクォート("")。解釈された文字列文字にのみ許可
    \aASCIIベル(BEL)
    \bASCIIバックスペース(BS)
    \fASCIIフォームフィード(FF)
    \nASCIIラインフィード(LF)
    \rASCIIカーレット(CR)
    \tASCIIタブ(TAB)
    \uhhhh指定された4の16の16進コードポイントのUnicode文字です。

    指定された8の32の16進コードポイントのUnicode文字です。
    \vASCII垂直制表符(VT)
    \xhh指定された2の8の16進コードポイントのUnicode文字です。
  • リターークェーション(``)を使用:ここでは、文字列リテラルはリターークェーション(``)を使用して作成されています。これをraw literals(原始文)。原始文はエスケープシーケンスをサポートしておらず、複数の行を跨ぎ、リターークェーション以外のどんな文字も含むことができます。通常、正規表現やHTML内で複数行のメッセージを書くために使用されます。

    package main
    import "fmt"
    func main() {
        //作成および初期化
        //文字列リテラルの変数
        //ダブルクォートを使用
        My_value_1 := "Welcome to w3codebox"
        //エスケープシーケンスを追加
        My_value_2 := "Welcome!\nw3codebox"
        //リターークェーションを使用
        My_value_3 := `Hello!w3codebox`
        //エスケープシーケンスを追加
        //原始文
        My_value_4 := `Hello!\nw3codebox`
        //表示
        fmt.Println("String 1: ", My_value_1)
        fmt.Println("String 2: ", My_value_2)
        fmt.Println("String 3: ", My_value_3)
        fmt.Println("String 4: ", My_value_4)
    }

    出力:

    String 1:  Welcome to w3codebox
    String 2:  Welcome!
    w3codebox
    String 3:  Hello!w3codebox
    String 4:  Hello!\nw3codebox

文字列に関するポイント

  • 文字列は変更不可能です:Go言語では、一旦文字列が作成されると、文字列は変更不可能であり、文字列の値を変更することはできません。言い換えれば、文字列は読み取り専用です。変更を試みると、コンパイラはエラーを発生させます。

    //文字列は変更不可能です
    package main 
      
    import "fmt"
      
    func main() { 
      
            //文字列の作成と初期化
            //ショートハンド宣言を使用
        mystr := "Welcome to w3codebox"
      
        fmt.Println("String:", mystr) 
      
        /* もしあなたが文字列の値を変更しようとすると、コンパイラはエラーを投げ出します、例えば、 
         cannot assign to mystr[1] 
           mystr[1]= 'G' 
           fmt.Println("String:", mystr) 
        */
      
    }

    出力:

    String: Welcome to w3codebox
  • 文字列を巡回する方法は?:for rangeループを使用して文字列を巡回できます。このループは、Unicodeコードポイント上で文字列をイテレートできます。

    文法:

    for index, chr := range str{
         // 文...
    }

    ここでは、インデックスはUTF-8エンコードされたコードポイントの最初のバイトの変数であり、chrは指定された文字列の文字を格納する変数、strは文字列です。

    //文字列を巡回
    //for範囲ループを使用
    package main
    import "fmt"
    func main() {
        //文字列はforループの範囲として
        for index, s := range "w3codebox" {
            fmt.Printf("%c インデックス値は %d\n", s, index)
        }
    }

    出力:

    n インデックス値は 0
    h インデックス値は 1
    o インデックス値は 2
    o インデックス値は 3
    o インデックス値は 4
  • 文字列の単一のバイトへのアクセス方法は?:文字列はバイトで構成されているため、指定された文字列の各バイトにアクセスできます。

    //文字列のバイトへのアクセス
    package main
    import "fmt"
    func main() {
        //文字列の作成と初期化
        str := "Welcome to w3codebox"
        //指定された文字列のバイトにアクセス
        for c := 0; c < len(str); c++ {
            fmt.Printf("\n文字 = %c バイト = %v", str[c], str[c])
        }
    }

    出力:

    文字 = W バイト = 87
    文字 = e バイト = 101
    文字 = l バイト = 108
    文字 = c バイト = 99
    文字 = o バイト = 111
    文字 = m バイト = 109
    文字 = e バイト = 101
    文字 =   バイト = 32
    文字 = t バイト = 116
    文字 = o バイト = 111
    文字 =   バイト = 32
    文字 = n バイト = 110
    文字 = h バイト = 104
    文字 = o バイト = 111
    文字 = o バイト = 111
    文字 = o バイト = 111
  • スライスからどうやって文字列を作成するか?:Go言語では、バイトスライスから文字列を作成することができます。

    //スライスから文字列を作成 
    package main 
      
    import "fmt"
      
    func main() { 
      
        //バイトスライスを文字列に作成し初期化
        myslice1 := []byte{0x47, 0x65, 0x65, 0x6b, 0x73} 
      
        //スライスから文字列を作成
        mystring1 := string(myslice1) 
      
        //表示文字列
        fmt.Println("String 1: ", mystring1) 
      
        //スライスを文字列に作成し初期化 
        myslice2 := []rune{0x0047, 0x0065, 0x0065, 0x006b, 0x0073} 
      
        //スライスから文字列を作成
        mystring2 := string(myslice2) 
      
        //表示文字列
        fmt.Println("String 2: ", mystring2) 
    }

    出力:

    String 1:  Geeks
    String 2:  Geeks
  • 文字列の長さをどうやって見つけるか?:Golangの文字列では、2つの関数を使用できます(一方はlen()、もう一方はRuneCountInString())で文字列の長さを見つけることができます。UTF-8パッケージはRuneCountInString()関数を提供しており、この関数は文字列に存在するすべての文字の数を返します。len()関数は文字列のバイト数を返します。

    //文字列の長さを検索
    package main
    import (
        "fmt"
        "unicode/utf8"
    )
    func main() {
        //文字列の作成と初期化
        //ショートハンド宣言を使用
        mystr := "Welcome to w3codebox ??????"
        //文字列の長さを検索
        //len()関数を使用
        length1 := len(mystr)
        //RuneCountInString()関数を使用
        length2 := utf8.RuneCountInString(mystr)
        //表示文字列の長さ
        fmt.Println("string:", mystr)
        fmt.Println("Length 1:", length1)
        fmt.Println("Length 2:", length2)
    }

    出力:

    string: Welcome to w3codebox ??????
    Length 1: 31
    Length 2: 31