golang笔记05

一、map(集合)

1、介绍

map是Go中内置类型,它将一个值与一个键关联起来,可以使用相应的键检索值,Map是一种无序的键值对集合,Map最重要的一点是通过key来快速检索数据。

使用map过程中需要注意的几点:

  1. map是无序的,每次打印出来的map都是不一样的,它不能通过index获取,而必须通过key获取
  2. map的长度是不固定的,也就是和slice一样,也是一种引用类型
  3. 内置的len函数同样适用于map,返回map拥有的key的数量
  4. map的key可以是所用可比较的类型,如布尔、整数型、浮点型、复杂型、字符串也可以

2、map的使用

/*
创建方式:
1、var 变量名 map[键类型]值类型 —— var map_value map[string]string (nil无法直接使用)
2、var 变量名=make(map[键类型]值类型) —— map_value=make(map[string]string) 
3、map_value:=map[string]string {"A":65,"B":66}
4、var map_value=map[string]string {"A":65,"B":66}
如果不初始化map,那么就会创建一个nil map.nil map不能用来存放键值对
*/
package main
import (
	"fmt"
	"sort"
)
func main() {
	s:="------------------------分割线-------------------------------"
	//创建map
	mapValue :=make(map[int]string)
	fmt.Println(s)

	//存储数据给map
	mapValue[1]="李白"
	mapValue[2]="杜甫"
	mapValue[3]="王安石"
	mapValue[4]="杜牧"
	fmt.Println(s)

	//获取数据,根据key获取对应数据
	//根据key获取对应的value,如果key存在,获取数值,如果不存在,获取的是对应值类型的默认值
	fmt.Println(mapValue)
	fmt.Println(mapValue[1])
	fmt.Println(mapValue[20])//""
	fmt.Println(s)

	//判断该值是否是默认值,接受两个值,第一个值是map键值对对应的值,另一个是表示该值是否为默认值的判断
	v1,ok :=mapValue[40]
	fmt.Println(v1,ok)
	fmt.Println(s)

	//修改数据
	mapValue[1]="小白" //将mapValue[1]改为小白
	fmt.Println(mapValue[1])
	fmt.Println(s)

	//删除数据,如果key不存在,则删除操作没有对map影响
	delete(mapValue,1)//将mapValue中键值为1的键值对删除
	fmt.Println(mapValue)
	fmt.Println(s)

	//获取map长度
	fmt.Println(len(mapValue))
	fmt.Println(s)
	//map的遍历
	/*
		使用for range
		数组,slice :index value
		map : key value
	*/
	for key,value := range mapValue{
		fmt.Println(key,value)
	}
	fmt.Println(s)
	/*
	通过字典序大小对map进行排序
	1、获取所有的key
	2、进行排序
	3、遍历map
	*/
	keys :=make([]int,0,len(mapValue))
	for key,_:=range mapValue{
		keys=append(keys,key)
	}
	fmt.Println(keys)
	//使用sort排序
	sort.Ints(keys)
	fmt.Println(keys)
	//遍历所有key来取map的所有值
	for _,key :=range keys{
		fmt.Println(key,mapValue[key])
	}
	fmt.Println(s)
}

2、map与slice的结合

package main
import "fmt"
func main() {
	/*
		1、使用map存储人的信息
		2、每个map存储一个人的信息
		3、将这些map存储到slice中
		4、打印出来
	*/
	people :=make([]map[string]string,0)
	for i:=0;i<3;i++{
		fmt.Println("请输入姓名、年龄、性别:")
		var name,age,sex string
		var mapValue=make(map[string]string)
		fmt.Scan(&name,&age,&sex)
		mapValue["name"]=name
		mapValue["age"]=age
		mapValue["sex"]=sex
		people=append(people,mapValue)
	}
	fmt.Println(people)

	for _,mpValue :=range people{
		fmt.Println(mpValue["name"],mpValue["age"],mpValue["sex"])
	}
}
输入:
请输入姓名、年龄、性别:
小欢 18 女
请输入姓名、年龄、性别:
小黄 19 男
请输入姓名、年龄、性别:
哦哦 17 女
输出:
[map[age:18 name:小欢 sex:] map[age:19 name:小黄 sex:] map[age:17 name:哦哦 sex:]]
小欢 18 女
小黄 19 男
哦哦 17

3、map嵌套map

//map是引用数据类型,传递的是地址同slice
package main
import "fmt"
func main() {
	//map嵌套另一个map
	mapValue:=make(map[string]map[string]string)
	m1:=map[string]string {"name":"小黑"}
	m2:=map[string]string {"name":"小红"}
	mapValue["first"]=m1
	mapValue["second"]=m2
	fmt.Println(mapValue)
	//遍历
	for _,value :=range mapValue{
		for key,val :=range value{
			fmt.Println(key,val)
		}
	}
}
输出:
map[first:map[name:小黑] second:map[name:小红]]
name 小黑
name 小红

二、字符串string

1、介绍

字符串是一个字节的切片,可以通过将其内容封装在 “ ” 中来创建字符串,Go中的字符串是Unicode兼容的并且是UTF-8编码的

2、strings包使用

//string不能任意修改   https://pkg.go.dev/strings@go1.18.2 strings包参考文档
package main
import (
	"fmt"
	"strings"
)
func main() {
	var str string="nihao"
	fmt.Println(str)
	fmt.Println(str[1])//unicode码
	fmt.Printf("%d %T\n",str[1],str[1])

	//string包使用
	//判断该字符是否在string中,strings.Contains(字符串,需要判断的字符串)
	//str="nihao"
	fmt.Println(strings.Contains(str,"aa"))//判断后面的字符是否全部在字符串里面
	fmt.Println(strings.ContainsAny(str,"aa"))//判断后面的字符任意一个字符是否在字符串里面
	fmt.Println(strings.Count(str,"aa"))//统计后面字符在字符串中出现的次数
	s2:="2019abc.txt"
	fmt.Println(strings.HasPrefix(s2,"2019"))//判断字符串以什么开头的
	fmt.Println(strings.HasSuffix(s2,".txt"))//判断字符串以什么结尾的
	fmt.Println(strings.Index(s2,"2"))//查找字符的第一次出现的位置,没有则返回-1
	fmt.Println(strings.IndexAny(s2,"ba"))//查找任意一个字符第一次出现的位置(返回下标小的),没有则返回-1
	fmt.Println(strings.LastIndex(s2,"t"))//查找字符的最后出现的位置,没有则返回-1

	//字符串拼接
	s3:=[]string{"A","B","C"}
	s4:=strings.Join(s3,"-")//将切片s3中的元素,用“-“连接起来
	s3=append(s3,"1")
	fmt.Println(s4)

	//字符串切割
	slice1:=strings.Split(s4,"-")//将字符串用-为分隔符切割放入切片中
	fmt.Println(slice1)

	//重复拼接
	s5:=strings.Repeat("hello",5)//将5个hello拼接在一起
	fmt.Println(s5)

	//替换,s5中的l全部替换成*,
	//第一个参数需要替换的字符串,第二个参数老的字符,第三个参数新的字符,第四个参数替换几次,-1表示全部替换
	s5=strings.Replace(s5,"l","*",-1)
	fmt.Println(s5)

	fmt.Println(strings.ToLower(s5))//全部变成小写
	fmt.Println(strings.ToUpper(s5))//全部变成大写

	//截取子串
	s6:=s5[1:3]
	fmt.Println(s6)
}

3、strconv包使用

package main

import (
	"fmt"
	"strconv"
)

func main() {
	/*
		strconv包:字符串和基本数据类型
		string convert
	*/
	//1、字符串转化为其他数据类型
	s1:="true"
	s3:="100"
	b1,err1 :=strconv.ParseBool(s1)
	//第一个参数转化源,第二个参数转化源的进制,第三个参数转成int的多少位
	b2,err2:=strconv.ParseInt(s3,2,64)
	if err1!=nil||err2!=nil{
		return
	}
	fmt.Printf("%T\n",b1)//b1是转化的值
	fmt.Printf("%T %d\n",b2,b2)//b2是转化的值,b2=4

	//2、将其他类型转化为string
	 s2:= strconv.FormatBool(b1)
	 s4:=strconv.FormatInt(b2,2)//b2=4,转化为二进制是100,再转化为string
	 fmt.Printf("%T\n",s2)
	 fmt.Printf("%T %s\n",s2,s4)

	 //itoa() atoi()
	 s5:=strconv.Itoa(-43)//int转为string
	 s6,err4:=strconv.Atoi("-42")//string转为int
	if err4!=nil{
		return
	}
	fmt.Printf("%T %s\n",s5,s5)
	fmt.Printf("%T %d",s6,s6)
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
GoLang学习笔记主要包括以下几个方面: 1. 语法规则:Go语言要求按照语法规则编写代码,例如变量声明、函数定义、控制结构等。如果程序中违反了语法规则,编译器会报错。 2. 注释:Go语言中的注释有两种形式,分别是行注释和块注释。行注释使用`//`开头,块注释使用`/*`开头,`*/`结尾。注释可以提高代码的可读性。 3. 规范代码的使用:包括正确的缩进和空白、注释风格、运算符两边加空格等。同时,Go语言的代码风格推荐使用行注释进行注释整个方法和语句。 4. 常用数据结构:如数组、切片、字符串、映射(map)等。可以使用for range遍历这些数据结构。 5. 循环结构:Go语言支持常见的循环结构,如for循环、while循环等。 6. 函数:Go语言中的函数使用`func`关键字定义,可以有参数和返回值。函数可以提高代码的重用性。 7. 指针:Go语言中的指针是一种特殊的变量,它存储的是另一个变量的内存地址。指针可以实现动态内存分配和引用类型。 8. 并发编程:Go语言提供了goroutine和channel两个并发编程的基本单位,可以方便地实现多线程和高并发程序。 9. 标准库:Go语言提供了丰富的标准库,涵盖了网络编程、文件操作、加密解密等多个领域,可以帮助开发者快速实现各种功能。 10. 错误处理:Go语言中的错误处理使用`defer`和`panic`两个关键字实现,可以有效地处理程序运行过程中出现的错误。 通过以上内容的学习,可以掌握Go语言的基本语法和编程思想,为进一步学习和应用Go语言打下坚实的基础。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Golang学习笔记](https://blog.csdn.net/weixin_52310067/article/details/129467041)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [golang学习笔记](https://blog.csdn.net/qq_44336275/article/details/111143767)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

废材终结者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值