English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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文字 |
\’ | シングルクォート(')。文字文字にのみ許可 |
\” | ダブルクォート("")。解釈された文字列文字にのみ許可 |
\a | ASCIIベル(BEL) |
\b | ASCIIバックスペース(BS) |
\f | ASCIIフォームフィード(FF) |
\n | ASCIIラインフィード(LF) |
\r | ASCIIカーレット(CR) |
\t | ASCIIタブ(TAB) |
\uhhhh | 指定された4の16の16進コードポイントのUnicode文字です。 |
指定された8の32の16進コードポイントのUnicode文字です。 | |
\v | ASCII垂直制表符(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