GO编程(打卡)-Task05: 字典、字符串

字典

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

posted @ 2020-12-16 17:41  柔南青空  阅读(75)  评论(0编辑  收藏  举报