上記の記事では、文字列型について学びました。
Go 言語では、文字列型は 基本型 であり、スタックに格納され、下記の構造となります。
ご覧のとおり、Go では、文字列は実際には連続した メモリ アドレスを指します と長さを記録し、一気に読み取ります。
では、上の図に示すように、メモリに保存されている 文字 の名前は何でしょうか。 ? ? ?
文字列は 文字で構成されます。これは、文字列 を結合して文字列にしたものでもあり、各文字は バイトと呼ばれます。 バイトは 1 バイト サイズ
を占有します。文字と句読点のみを保存できます。オンでは、中国語は保存できません。 もちろん、中国語を保存したらどうすればよいですか??? Go には rune
があります、および byte
は類似しており、本質は byte
と同じです。 rune
を除く 1 つは 4 バイトを占有します。
rune
したがって、中国語を処理する場合は、 文字で囲みます一重引用符 #コード 结果: 但是 发现了吗,打印的竟然是一个数字?这是为啥??? 就拿字母 同理,字符 同理,字符串相当于是字节列表组成的,是不能直接修改的,想要直接修改需要打散成字节列表才行。utf-8
を使用しますエンコードにより中国語やさまざまな言語を保存できます。 rune
タイプを使用するようにしてください。 (バイト) バイト型変数を定義します
#'
で囲みます。 package main
import "fmt"
func main() {
var a byte = 'a'
fmt.Println(a)
}
子供たち、たくさん質問はありますか? なぜ 97# なのでしょうか? ## ##################理由#########
byte
代表的是一个ASCII
码的一个字符,同理,rune
可以理解为是byte
的一个超集,向下兼容byte
。package main
import "fmt"
func main() {
var a rune = 'a'
fmt.Println(a)
}
rune
里面可以写中文,byte
不行。byte不能存中文
rune可以存中文
a
来说,其实打印的是ASCII
对应的数字,打印的是他的十进制。张
也是,这里就不做例子了,因为utf-8
表太大了。遍历字符串
方式一
package main
import "fmt"
func main() {
s := "我是法外狂徒,张三,hahaha"
for _, r := range s {
fmt.Printf("%c \n",r)
}
}
方式二
package main
import "fmt"
func main() {
s := "我是法外狂徒,张三,hahaha"
for i := 0; i < len(s); i++ {
//中文会乱码,不推荐
fmt.Printf("%c \n",s[i])
}
}
修改字符串
package main
import "fmt"
func main() {
//只有英文的情况下
s1 := "hello world"
var s1_byte_list = []byte(s1) //打散成字符列表
s1_byte_list[6] = 'F' //修改下表为6的字符为F
s1 = string(s1_byte_list) //打散的字符列表在组装成字符串
fmt.Println(s1) //输出 hello 6orld
//带有中文的情况
s2 := "天空好像下雨,我好像住你隔壁vay"
var s2_rune_list = []rune(s2) //打散成utf-8字符列表
s2_rune_list[5] = '雪' //修改下表为5的字符为雪
s2 = string(s2_rune_list) //打散的utf8字符转字符串
fmt.Println(s2) //输出 天空好像下雪,我好像住你隔壁
}
以上がGo 言語のバイト型の基本を理解するのに役立つ記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。