Go语言基础之基本数据类型

整型

整型分为以下两个大类:

按长度分为:int8、int16、int32、int64

对应的无符号整型:uint8、uint16、uint32、uint64

浮点型

Go语言支持两种浮点型数:float32float64

复数

complex64和complex128

布尔值

布尔型数据只有true(真)false(假)两个值

注意:

1、布尔类型变量的默认值为false

2、Go 语言中不允许将整型强制转换为布尔型.

3、布尔型无法参与数值运算,也无法与其他类型进行转换。

字符串

go 复制代码
s1 := "hello"
s2 := "你好"
 
armasm 复制代码
// 字符串连接
combined := s1 + " " + s2  // 结果为 "hello 你好"

// 获取字符串长度
length1 := len(s1)  // 英文长度为 5
length2 := len(s2)  // 中文长度为 2(UTF-8 编码下每个中文字符占 3 字节,但 len 返回字符数)

// 字符串比较
isEqual := (s1 == s2)  // 结果为 false
 

字符串拼接

使用加号(+)或字符串的 join() 方法可以将多个字符串连接起来。加号适用于少量字符串拼接,而 join() 方法在处理大量字符串时效率更高。

python 复制代码
str1 = "Hello"
str2 = "World"
result = str1 + " " + str2  # 输出: "Hello World"

words = ["Hello", "World"]
result = " ".join(words)  # 输出: "Hello World"

字符串分割

split() 方法可以将字符串按指定分隔符拆分为列表。若不指定分隔符,默认按空白字符分割。

python 复制代码
text = "Hello,World"
parts = text.split(",")  # 输出: ["Hello", "World"]

字符串替换

replace() 方法用于替换字符串中的子串。可以指定替换次数。

python 复制代码
text = "Hello World"
new_text = text.replace("World", "Python")  # 输出: "Hello Python"

大小写转换

upper()lower() 方法分别将字符串转换为全大写或全小写。capitalize() 将首字母大写,其余小写。

python 复制代码
text = "Hello World"
upper_text = text.upper()  # 输出: "HELLO WORLD"
lower_text = text.lower()  # 输出: "hello world"

去除空白字符

strip() 方法去除字符串两端的空白字符(包括空格、换行符等)。lstrip()rstrip() 分别去除左侧或右侧的空白。

python 复制代码
text = "  Hello World  "
stripped = text.strip()  # 输出: "Hello World"

字符串查找

find() 方法返回子串首次出现的索引,未找到时返回 -1index() 方法类似,但未找到时会抛出异常。

python 复制代码
text = "Hello World"
position = text.find("World")  # 输出: 6

字符串格式化

使用 format() 方法或 f-string(Python 3.6+)可以动态插入变量值。

python 复制代码
name = "Alice"
age = 25
# format() 方法
message = "My name is {} and I am {} years old".format(name, age)
# f-string
message = f"My name is {name} and I am {age} years old"

字符串长度

len() 函数返回字符串的字符数。

python 复制代码
text = "Hello"
length = len(text)  # 输出: 5

字符串切片

通过索引和切片操作可以获取子串。索引从 0 开始,支持负数索引(从末尾开始计数)。

python 复制代码
text = "Hello World"
substring = text[0:5]  # 输出: "Hello"
last_char = text[-1]   # 输出: "d"

检查字符串内容

startswith()endswith() 检查字符串是否以指定子串开头或结尾。

isalpha()isdigit() 等方法检查字符串是否全为字母或数字。

python 复制代码
text = "Hello"
is_alpha = text.isalpha()  # 输出: True
starts_with_he = text.startswith("He")  # 输出: True

byte和rune类型

  • byte 用于单字节数据,rune 用于 Unicode 字符。
  • 在处理字符串时,优先使用 rune 以避免多字节字符问题。
  • 类型转换时需注意数据范围
go 复制代码
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字符串修改(使用[]byte)

go 复制代码
s1 := "big"
byteS1 := []byte(s1)  // 转换为字节切片
byteS1[0] = 'p'       // 修改第一个字节
fmt.Println(string(byteS1))  // 输出: pig
 

Unicode字符串修改(使用[]rune)

go 复制代码
s2 := "白萝卜"
runeS2 := []rune(s2)  // 转换为符文切片
runeS2[0] = '红'       // 修改第一个符文
fmt.Println(string(runeS2))  // 输出: 红萝卜
 

关键区别

  • []byte按字节处理,适合ASCII字符(每个字符1字节)
  • []rune按Unicode码点处理,适合多字节字符(如中文,每个字符3字节)
  • 错误使用[]byte处理中文会导致乱码(因为会拆散多字节字符)

性能考虑

  • []byte转换更高效,但仅适用于单字节字符集
  • []rune转换会进行完整的Unicode解码,开销较大
  • 修改后都需要通过string()转换回字符串类型

类型转换

go 复制代码
var a, b = 3, 4
var c int
c = int(math.Sqrt(float64(a*a + b*b)))
  • a*a + b*b 计算两直角边平方和(3² + 4² = 25)
  • float64() 将整型结果转换为float64类型(math.Sqrt要求的参数类型)
  • math.Sqrt() 计算平方根(√25 = 5.0)
  • int() 将浮点结果转换回整型
go 复制代码
fmt.Println(c)
 
//打印计算结果5(整型)。
相关推荐
fffcccc11122 小时前
关于解决Eino不兼容音音频输入的问题
后端
Leo8992 小时前
go从零单排之方法
后端
十五年专注C++开发2 小时前
libuv:一个跨平台的C++异步 I/O 库
开发语言·c++·node.js·libuv·vlibuv
wefly20172 小时前
告别本地环境!m3u8live.cn一键实现 M3U8 链接预览与调试
前端·后端·python·音视频·m3u8·前端开发工具
SuperEugene2 小时前
前端 console 日志规范实战:高效调试 / 垃圾 log 清理与线上安全避坑|编码语法规范篇
开发语言·前端·javascript·vue.js·安全
程序员敲代码吗2 小时前
USB-C接口深度测试:从Vconn到电压的全方位分析
c语言·开发语言
racerun2 小时前
跳转链接批量解析工具 python
开发语言·python
lars_lhuan3 小时前
Go Cond 源码解析
golang
qq_417695053 小时前
C++中的解释器模式
开发语言·c++·算法