Les types de données du langage Go sont : 1. Type booléen, la valeur ne peut être qu'une constante vraie ou fausse ; 2. Type numérique, qui prend en charge les nombres entiers et les nombres à virgule flottante, et prend en charge les nombres complexes ; qui est une chaîne de caractères reliée par des caractères de longueur fixe ; 4. Type de pointeur ; 5. Type de tableau ; 7. Type de canal ; 9. Type de tranche ; Type de carte.
L'environnement d'exploitation de ce tutoriel : système Windows 7, GO version 1.18, ordinateur Dell G3.
Dans le langage de programmation Go, les types de données sont utilisés pour déclarer des fonctions et des variables.
L'émergence des types de données consiste à diviser les données en données avec différentes tailles de mémoire requises lors de la programmation, vous devez demander une grande mémoire uniquement lorsque vous avez besoin d'utiliser du Big Data, afin de pouvoir utiliser pleinement la mémoire.
Le langage Go a les types de données suivants par catégorie :
Numéro de série | Type et description |
---|---|
1 |
Booléen La valeur de Booléen ne peut être que la constante vraie ou fausse. Un exemple simple : var b bool = true. |
2 |
Type de nombre Type entier int et type à virgule flottante float32, float64, le langage Go prend en charge les nombres entiers et à virgule flottante, et prend en charge les nombres complexes, et le fonctionnement des bits utilise le code complémentaire. |
3 |
Type de chaîne : Une chaîne est une séquence de caractères reliée par une série de caractères de longueur fixe. Les chaînes de Go sont concaténées à partir d'octets individuels. Les octets des chaînes du langage Go utilisent le codage UTF-8 pour identifier le texte Unicode. |
4 |
Les types dérivés : incluent :
|
int8、int16、int32、int64
uint8、uint16、uint32、uint64
uint8 对应 byte 型 int16 对应 C 语言中的 short 型 int64 对应 C 语言中的 long 型
Description | |
---|---|
Signé 8 bits en teger (-1 28 à 127) | |
Entier signé de 16 bits (-32768 à 32767) | |
Entier signé de 32 bits (-2147483648 à 2147483647) | |
Entier signé 64 bits ( -9223372036854775808 à 9223372036854775807 ) | |
Entier non signé de 8 bits (0 à 255) | |
Entier non signé de 16 bits (0 à 6553 5) | |
type entier 32 bits non signé ( 0 à 4294967295) | |
Type entier 64 bits non signé (0 à 18446744073709551615) |
uint | |||||||||||||||||||||||||||||||
uintptr | |||||||||||||||||||||||||||||||
1.4.注意1.在使用 int 和 uint 类型时,不能假定它是 32 位或 64 位的整型,而是考虑 int 和 uint 可能在不同平台上的差异 2.获取对象的长度的内建 len() 函数返回的长度可以根据不同平台的字节长度进行变化 3.实际使用中,切片或 map 的元素数量等都可以用 int 来表示 4.在涉及到二进制传输,读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用 int 和 uint Copier après la connexion 1.5.数字字面量语法
v := 0b00101101, 代表二进制的 101101,相当于十进制的 45 v := 0o377,代表八进制的 377,相当于十进制的 255 v := 0x1p-2,代表十六进制的 1 除以 2²,也就是 0.25 Copier après la connexion
v := 123_456 表示 v 的值等于 123456。 Copier après la connexion
package main import "fmt" func main() { // 定义十进制数 var a int = 10 fmt.Printf("%d \n", a) // 占位符 %d 表示使用十进制显示为 10 fmt.Printf("%b \n", a) // 占位符 %b 表示使用二进制显示为 1010 // 定义八进制数,需要以 0 开头 var b int = 077 fmt.Printf("%o \n", b) // 占位符 %o 表示使用八进制显示为 77 // 定义十六进制数,需要以 0x 开头 var c int = 0xff fmt.Printf("%x \n", c) // 占位符 %x 表示使用十六进制显示为 ff,小写字母显示 fmt.Printf("%X \n", c) // 占位符 %X 表示使用十六进制显示为 FF,大写字母显示 } Copier après la connexion 2.浮点型
float32 的浮点数的最大范围约为 3.4e38,可以使用常量定义:math.MaxFloat32 float64 的浮点数的最大范围约为 1.8e308,可以使用一个常量定义:math.MaxFloat64 打印浮点数时,可以使用 fmt 包配合 %f Copier après la connexion
package main import ( "fmt" "math" ) func main() { fmt.Printf("%f\n", math.Pi) fmt.Printf("%.2f\n", math.Pi) } Copier après la connexion 3.复数
var c1 complex64 c1 = 1 + 2i var c2 complex128 c2 = 2 + 3i fmt.Println(c1) fmt.Println(c2) Copier après la connexion 4.布尔值
1.布尔型数据只有 true 和 false 两个值,布尔类型变量的默认值为 false。 2.Go 语言中不允许将整型强制转换为布尔型. 3.布尔型无法参与数值运算,也无法与其他类型进行转换 Copier après la connexion 5.字符串
5.1.定义一个字符串类型的变量
package main import "fmt" func main() { // 使用 双引号 定义 单行字符串 变量 s1 := "hello" //定义英文字符串 s2 := "你好" // 可以识别非 ASCII 码,默认支持 utf-8 编码 // 使用 反引号 定义 多行字符串 变量 s3 := ` 11111 22222 // 多行字符串里的双斜杠也表示注释 33333 ` // 使用 单引号 定义 单个字符 变量 s4 := 'h' fmt.Println("\n单行字符串01", s1) fmt.Println("\n单行字符串02", s2) fmt.Println("\n多行字符串", s3) fmt.Println("\n字符定义", s4) } Copier après la connexion 5.2.字符串转义
5.3.字符串转义-实例演示package main import ( "fmt" ) func main() { // 转义符的使用 fmt.Println("\n# 转义符的使用 str := \"c:\\go\"") } Copier après la connexion 5.4.字符串操作
5.5.字符串操作-实例演示package main import ( "fmt" "strings" ) // 字符串操作 func main() { // 字符串求长度 s3 := "zhongguojueqi" fmt.Println("\n字符串-求长度: ", len(s3)) // 字符串拼接 s4 := "nihaoshijie" fmt.Println("\n字符串-拼接01: ", s3+s4) s5 := fmt.Sprintf("%s---%s", s3, s4) fmt.Println("\n字符串-拼接02: ", s5) // 字符串分割 s6 := strings.Split(s3, "o") fmt.Println("\n字符串-分割: ", s6) // 字符串包含判断 s7 := strings.Contains(s3, "o") fmt.Println("\n字符串-包含判断01: ", s7) fmt.Println("\n字符串-包含判断02: ", strings.Contains(s3, "o")) // 字符串前缀, 后缀判断 fmt.Println("\n字符串-前缀判断: ", strings.HasPrefix(s3, "zhong")) fmt.Println("\n字符串-后缀判断: ", strings.HasSuffix(s3, "qi")) // 字符串索引查找 fmt.Println("\n字符串-索引查找-第一个字符 o 的索引: ", strings.Index(s3, "o")) fmt.Println("\n字符串-索引查找-最后一个字符 o 的索引: ", strings.LastIndex(s3, "o")) // 字符串-join操作 s8 := []string{"aaa", "bbb", "ccc", "ddd"} fmt.Println("\n字符串-join 操作: ", strings.Join(s8, " + ")) } Copier après la connexion 6.字符6.1.定义一个字符变量
func runeDemo01() { // 字符定义 a := '中' // 默认识别为 rune 类型的字符变量 b := "中" // 定义一个字符串 var c byte = 'a' // 定义一个byte类型字符 var d rune = 'a' // 定义一个rune类型字符 fmt.Println(a, b) fmt.Printf("%v,%T\n", c, c) fmt.Printf("%v,%T\n", d, d) } Copier après la connexion 6.2.字符类型有两种6.2.1.uint8-类型字符
6.2.2.rune-类型字符
7.字符串拓展7.1.字符串遍历-方法1-使用循环依次取出字符串中的元素// 字符串遍历-traversalString package main import ( "fmt" ) func traversalString01() { s := "hello世界" for i := 0; i < len(s); i++ { // 中英文使用 for循环加 len() 方法遍历循环,但遇到中文会有乱码 fmt.Printf("%v(%c) ", s[i], s[i]) } fmt.Println() fmt.Println([]byte(s)) } ----------------------- 104(h) 101(e) 108(l) 108(l) 111(o) 228(ä) 184(¸) 150() 231(ç) 149() 140() ----------------------- Copier après la connexion 7.2.字符串遍历-方法2-rune-类型遍历可以使用 for range 循环package main import ( "fmt" ) // 遍历字符串 traversalString func traversalString02() { s := "hello世界" fmt.Println() for _, r := range s { // 按照 rune 类型遍历 fmt.Printf("%v(%c) ", r, r) } fmt.Println() fmt.Println([]rune(s)) } ----------------------- 104(h) 101(e) 108(l) 108(l) 111(o) 19990(世) 30028(界) ----------------------- Copier après la connexion
1.因为 UTF8 编码下一个中文汉字由 3~4 个字节组成,所以我们不能简单的按照字节去遍历一个包含中文的字符串,否则就会出现上面输出中第一行的结果 2.字符串底层是一个 byte 数组,所以可以和 []byte 类型相互转换 3.字符串是不能修改的 字符串是由 byte 字节组成,所以字符串的长度是 byte 字节的长度 4.rune 类型用来表示 utf8 字符,一个 rune 字符由一个或多个 byte 组成。 Copier après la connexion 7.3.字符串修改
func changeString() { s1 := "big" // 强制类型转换 byteS1 := []byte(s1) byteS1[0] = 'p' fmt.Println(string(byteS1)) s2 := "白萝卜" runeS2 := []rune(s2) runeS2[0] = '红' fmt.Println(string(runeS2)) } Copier après la connexion 8.类型转换
8.1.类型转换-语法T(表达式) Copier après la connexion
8.1.类型转换-实例演示func sqrtDemo() { var a, b = 3, 4 var c int // math.Sqrt()接收的参数是float64类型,需要强制转换 c = int(math.Sqrt(float64(a*a + b*b))) fmt.Println(c) } Copier après la connexion
计算直角三角形的斜边长时使用 math 包的 Sqrt() 函数,该函数接收的是 float64 类型的参数 |
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!