Go语言基础之基本数据类型
整型整型分为以下两个大类按长度分为int8、int16、int32、int64对应的无符号整型uint8、uint16、uint32、uint64浮点型Go语言支持两种浮点型数float32和float64复数complex64和complex128布尔值布尔型数据只有true真和false假两个值注意1、布尔类型变量的默认值为false。2、Go 语言中不允许将整型强制转换为布尔型.3、布尔型无法参与数值运算也无法与其他类型进行转换。字符串s1 : hello s2 : 你好// 字符串连接 combined : s1 s2 // 结果为 hello 你好 // 获取字符串长度 length1 : len(s1) // 英文长度为 5 length2 : len(s2) // 中文长度为 2UTF-8 编码下每个中文字符占 3 字节但 len 返回字符数 // 字符串比较 isEqual : (s1 s2) // 结果为 false字符串拼接使用加号或字符串的join()方法可以将多个字符串连接起来。加号适用于少量字符串拼接而join()方法在处理大量字符串时效率更高。str1 Hello str2 World result str1 str2 # 输出: Hello World words [Hello, World] result .join(words) # 输出: Hello World字符串分割split()方法可以将字符串按指定分隔符拆分为列表。若不指定分隔符默认按空白字符分割。text Hello,World parts text.split(,) # 输出: [Hello, World]字符串替换replace()方法用于替换字符串中的子串。可以指定替换次数。text Hello World new_text text.replace(World, Python) # 输出: Hello Python大小写转换upper()和lower()方法分别将字符串转换为全大写或全小写。capitalize()将首字母大写其余小写。text Hello World upper_text text.upper() # 输出: HELLO WORLD lower_text text.lower() # 输出: hello world去除空白字符strip()方法去除字符串两端的空白字符包括空格、换行符等。lstrip()和rstrip()分别去除左侧或右侧的空白。text Hello World stripped text.strip() # 输出: Hello World字符串查找find()方法返回子串首次出现的索引未找到时返回-1。index()方法类似但未找到时会抛出异常。text Hello World position text.find(World) # 输出: 6字符串格式化使用format()方法或 f-stringPython 3.6可以动态插入变量值。name Alice age 25 # format() 方法 message My name is {} and I am {} years old.format(name, age) # f-string message fMy name is {name} and I am {age} years old字符串长度len()函数返回字符串的字符数。text Hello length len(text) # 输出: 5字符串切片通过索引和切片操作可以获取子串。索引从0开始支持负数索引从末尾开始计数。text Hello World substring text[0:5] # 输出: Hello last_char text[-1] # 输出: d检查字符串内容startswith()和endswith()检查字符串是否以指定子串开头或结尾。isalpha()、isdigit()等方法检查字符串是否全为字母或数字。text Hello is_alpha text.isalpha() # 输出: True starts_with_he text.startswith(He) # 输出: Truebyte和rune类型byte用于单字节数据rune用于 Unicode 字符。在处理字符串时优先使用rune以避免多字节字符问题。类型转换时需注意数据范围s : Hello, 世界 for i : 0; i len(s); i { fmt.Printf(%c , s[i]) // 用 byte 遍历会乱码 } fmt.Println() for _, r : range s { fmt.Printf(%c , r) // 用 rune 遍历正常 }字符串修改ASCII字符串修改使用[]bytes1 : big byteS1 : []byte(s1) // 转换为字节切片 byteS1[0] p // 修改第一个字节 fmt.Println(string(byteS1)) // 输出: pigUnicode字符串修改使用[]runes2 : 白萝卜 runeS2 : []rune(s2) // 转换为符文切片 runeS2[0] 红 // 修改第一个符文 fmt.Println(string(runeS2)) // 输出: 红萝卜关键区别[]byte按字节处理适合ASCII字符每个字符1字节[]rune按Unicode码点处理适合多字节字符如中文每个字符3字节错误使用[]byte处理中文会导致乱码因为会拆散多字节字符性能考虑[]byte转换更高效但仅适用于单字节字符集[]rune转换会进行完整的Unicode解码开销较大修改后都需要通过string()转换回字符串类型类型转换var a, b 3, 4 var c int c int(math.Sqrt(float64(a*a b*b)))a*a b*b计算两直角边平方和3² 4² 25float64()将整型结果转换为float64类型math.Sqrt要求的参数类型math.Sqrt()计算平方根√25 5.0int()将浮点结果转换回整型fmt.Println(c) //打印计算结果5整型。