golang基础语法

1.数据类型

1.1 字符串字面量

1.1.1 初始化

和 C/C++ 不一样,Golang 语言中的字符串是根据长度限定的,而非特殊的字符 \0。string 类型的 0 值是长度为 0 的字符串,即空字符串 “”。

go中的字符串是UTF8编码的不可改变的字符序列,ASSCI码占用1字节,其他字符根据需要占用2~4字节,初始化方式如下:

1
2
s1 := "HelloWorld"
s2 := "smile你好"

字符串字面值的两种写法:

1
2
3
s1 := "Hello\nWorld!"			// 支持解析转义字符
s2 := `Hello\n // 原样输出,支持换行
nick!`

1.1.2 获取长度

内置函数len:获取内存中字节数量,遇见中文字符长度计算会不准确

1
2
3
4
5
6
7
8
s1 := "HelloWorld"
s2 := "smile你好"

fmt.Printf("s1: %d\n", len(s1))
fmt.Printf("s2: %d\n", len(s2))
>>>>>>
s1: 10
s2: 11

计算中文字符串长度:先将字符串转换为 [ ]rune 类型,再调用len函数即可。

1
2
3
4
5
6
7
8
s1 := "HelloWorld"
s2 := "smile你好"

fmt.Printf("s1: %d\n", len([]rune(s1)))
fmt.Printf("s2: %d\n", len([]rune(s2)))
>>>>>>
s1: 10
s2: 7

1.1.3 截取内容

左含右不含,越界会异常

1
2
3
4
5
6
7
8
9
10
11
12
s := "abcdef"
fmt.Printf("%s\n", s[1:4])
>>>>>>
bcd

fmt.Printf("%s\n", s[:4])
>>>>>>
abcd

fmt.Printf("%s\n", s[2:])
>>>>>>
cdef

1.1.4 遍历字符串

字节序列遍历

1
2
3
4
5
6
s := "abc你好"
for i := 0; i < len(s); i++ {
fmt.Printf("%c", s[i])
}
>>>>>>
abcä½ å¥½

字符序列遍历

1
2
3
4
5
6
s := "abc你好"
for _, v := range s {
fmt.Printf("%c", v)
}
>>>>>>
abc你好

1.1.5 修改内容

字节修改

1
2
3
4
5
6
7
8
s := "Hello 世界"
b := []byte(s) // 转换为 []byte,数据被自动复制
b[5] = ',' // 把空格改为半角逗号
fmt.Printf("%s\n", s)
fmt.Printf("%s\n", b)
>>>>>>
Hello 世界
Hello,世界

字符修改

1
2
3
4
5
6
7
8
9
s := "Hello 世界"
b := []rune(s) // 转换为 []rune,数据被自动复制
b[6] = '中'
b[7] = '国'
fmt.Println(s)
fmt.Println(string(b))
>>>>>>
Hello 世界
Hello 中国

1.2 strings库

go语言内置字符串库,支持多种字符串操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// 检查子串包含
s := "A good tree bears good fruit"
fmt.Printf("%t\n", strings.Contains(s, "tree"))
>>>>>>
true

// 获取索引
fmt.Println(strings.Index("Hi I'm Nick, Hi", "Nick")) // 7
fmt.Println(strings.Index("Hi I'm Nick, Hi", "Hi")) // 0
fmt.Println(strings.Index("Hi I'm Nick, Hi", "abc")) // -1
fmt.Println(strings.LastIndex("Hi I'm Nick, Hi", "Hi")) // 13

// 替换字符串
fmt.Println(strings.Replace("你好世界", "世界", "地球", 1))
>>>>>>
你好地球

// 大小写转换
s := "A good tree bears good fruit"
s1 := "HOW ARE YOU?"
fmt.Printf("%s\n", strings.ToUpper(s))
fmt.Printf("%s\n", strings.ToLower(s1))
>>>>>>
A GOOD TREE BEARS GOOD FRUIT
how are you?

// 修剪
fmt.Printf("%q\n", strings.Trim(" Golang ", " "))
fmt.Printf("%q\n", strings.TrimLeft(" Golang ", " "))
fmt.Printf("%q\n", strings.TrimRight(" Golang ", " "))
>>>>>>
"Golang"
"Golang "
" Golang"

// 分隔与拼接
fmt.Printf("%q\n", strings.Split("a,b,c", ","))
fmt.Printf("%q\n", strings.Split("a boy a girl a cat", "a "))
fmt.Printf("%q\n", strings.Split("xyz", ""))
>>>>>>
["a" "b" "c"]
["" "boy " "girl " "cat"]
["x" "y" "z"]

fmt.Printf("%q\n", strings.Join([]string{"boy", "girl", "cat"}, ";"))
>>>>>>
"boy;girl;cat"

1.3 strconv库

go语言内置字符串库,主要用于将字符串类型与其他类型进行转换。

1
2
3
4
5
num, _ := strconv.Atoi("123")
num += 5
fmt.Printf("%d\n", num)
>>>>>>
128

golang基础语法
http://helloymf.github.io/2023/02/22/golang-ji-chu-yu-fa/
作者
JNZ
许可协议