Maison > développement back-end > Golang > Un article pour vous aider à comprendre les bases des types d'octets du langage Go

Un article pour vous aider à comprendre les bases des types d'octets du langage Go

Libérer: 2023-07-20 14:52:31
avant
1664 Les gens l'ont consulté
Cette fois, continuons à apprendre les types d'octets de base de Go.

Examen des chaînes ci-dessus

Dans l'article ci-dessus, nous avons découvert le type de chaîne.

En langage Go, le type de chaîne est type de base, qui est stocké sur la pile et sa structure est la suivante.

Un article pour vous aider à comprendre les bases des types d'octets du langage Go

Vous pouvez voir que dans Go, la chaîne pointe en fait vers une adresse mémoire continue, et la longueur est enregistrée et la lecture est lue en une seule fois.

Alors, comme le montre l'image ci-dessus, comment s'appellent les lettres stockées dans la mémoire ? ? ?


types d'octets et de runes

Les chaînes sont des caractères assemblés ensemble , et inversement, ce sont aussi des caractères assemblés en chaînes, et des caractères un par un, est appelé byte.

Les octets occupent 1 octet Il ne peut stocker que des lettres, des signes de ponctuation et autres, mais pas des caractères chinois.

Bien sûr, que dois-je faire si j'enregistre le chinois ??? Il y a un runerune,和byte类似,本质和byte一样,只不过rune一个占用4个字节。

rune使用utf-8, et byte

🎜 est similaire, et son essence est 🎜🎜byte🎜🎜 est le même, sauf 🎜🎜rune🎜🎜une occupe 🎜🎜🎜4 octets. 🎜🎜🎜

rune🎜🎜use🎜🎜utf-8🎜🎜encodage, peut enregistrer le chinois et diverses langues. 🎜🎜

Alors, essayez d'utiliser runerune类型。


定义个(字节)byte类型变量

字符用单引号'tapez.

Définir une variable de type octet (octet)

Utiliser des guillemets simples pour les caractères
' Entouré du numéro

. Un article pour vous aider à comprendre les bases des types d'octets du langage Go

Code

package main

import "fmt"

func main() {
    var a byte = 'a'
    fmt.Println(a)
}
Copier après la connexion
🎜🎜🎜Les enfants, avez-vous beaucoup de questions ??? Pourquoi est-ce 97🎜🎜🎜🎜🎜🎜🎜🎜raison🎜🎜🎜

byte代表的是一个ASCII码的一个字符,同理,rune可以理解为是byte的一个超集,向下兼容byte

package main

import "fmt"

func main() {
    var a rune = 'a'
    fmt.Println(a)
}
Copier après la connexion

结果:

Un article pour vous aider à comprendre les bases des types d'octets du langage Go

但是rune里面可以写中文,byte不行。

byte不能存中文

Un article pour vous aider à comprendre les bases des types d'octets du langage Go

rune可以存中文

Un article pour vous aider à comprendre les bases des types d'octets du langage Go

发现了吗,打印的竟然是一个数字?这是为啥???

就拿字母a来说,其实打印的是ASCII对应的数字,打印的是他的十进制。

同理,字符也是,这里就不做例子了,因为utf-8表太大了。

Un article pour vous aider à comprendre les bases des types d'octets du langage Go

遍历字符串

方式一

package main

import "fmt"

func main() {
    s := "我是法外狂徒,张三,hahaha"
    for _, r := range s {
        fmt.Printf("%c \n",r)
}
}
Copier après la connexion

Un article pour vous aider à comprendre les bases des types d'octets du langage Go

方式二

package main

import "fmt"

func main() {
    s := "我是法外狂徒,张三,hahaha"
    for i := 0; i < len(s); i++ {
        //中文会乱码,不推荐
        fmt.Printf("%c \n",s[i])
}
}
Copier après la connexion

Un article pour vous aider à comprendre les bases des types d'octets du langage Go

修改字符串

同理,字符串相当于是字节列表组成的,是不能直接修改的,想要直接修改需要打散成字节列表才行。

package main

import "fmt"

func main() {
    //只有英文的情况下
    s1 := "hello world"
    var s1_byte_list = []byte(s1) //打散成字符列表
    s1_byte_list[6] = &#39;F&#39;         //修改下表为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] = &#39;雪&#39;         //修改下表为5的字符为雪
    s2 = string(s2_rune_list)     //打散的utf8字符转字符串
    fmt.Println(s2)               //输出 天空好像下雪,我好像住你隔壁
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:Go语言进阶学习
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal