字典
package main
import "fmt"
func main() {
// 定义字典方式一
var m1 map[string]int
// 定义字典方式二
// interface{}表示value值可以是任意类型,但使用时需类型断言来判断类型
m2 := make(map[int]interface{}, 100)
// 定义字典方式三
m3 := map[string]string{
"name": "james",
"age": "35",
}
// 初始化字典变量
m1 = map[string]int{
"key1": 8,
}
// 添加key-value
m2[1] = 1
m2[2] = "2"
m3["key3"] = "value3"
fmt.Println(len(m1), len(m2), len(m3))
// 判断键值是否存在
if _, ok := m3["name"]; ok {
fmt.Println("字典m3存在key name")
}
// 遍历字典 默认无序
for key, value := range m3 {
fmt.Println("m3['", key, "']=", value)
}
// 删除键值
delete(m3, "key3")
// 函数作为值类型传入
m4 := make(map[string]func(a, b int) int)
m4["add"] = func(a, b int) int {
return a + b
}
m4["multi"] = func(a, b int) int {
return a * b
}
fmt.Println("m4['add']=", m4["add"](3, 2))
fmt.Println("m4['multi']=", m4["multi"](3, 2))
}
字符串
- 字符串定义
值不可变
package main
import (
"bytes"
"fmt"
"strconv"
"strings"
)
func main() {
// 定义字符串 一个中文占用三个字节
s := "string字符串"
fmt.Println("变量s的长度len(s)=", len(s))
// 切片
b := []byte(s)
for i := 0; i < len(b); i++ {
// 格式化输出
fmt.Printf("%c", b[i])
}
fmt.Println()
// 包含中文的切片
r := []rune(s)
for i := 0; i < len(r); i++ {
fmt.Printf("%c", r[i])
}
fmt.Println()
// strings包提供了许多操作字符串的函数
// strconv包实现了基本数据类型与字符串之间的转换
// 拼接
count := 5
// SPrintf
s = ""
for i := 1; i < count; i++ {
s = fmt.Sprintf("%v%v", s, i)
}
fmt.Println("字符串拼接SPrintf", s)
// +
s = ""
for i := 1; i < count; i++ {
s += strconv.Itoa(i)
}
fmt.Println("字符串拼接+", s)
// bytes.Buffer
var buf bytes.Buffer
for i := 1; i < count; i++ {
buf.WriteString(strconv.Itoa(i))
}
s = buf.String()
fmt.Println("字符串拼接bytes.Buffer", s)
// strings.Builder
var builder strings.Builder
for i := 1; i < count; i++ {
builder.WriteString(strconv.Itoa(i))
}
s = builder.String()
fmt.Println("字符串拼接strings.Builder", s)
}
参考
https://github.com/datawhalechina/go-talent/blob/master/4.字典、字符串.md