首页 > 其他分享 >Golang基础-5

Golang基础-5

时间:2022-09-06 18:44:25浏览次数:68  
标签:map string int make 基础 Golang 键值 var

Golang基础-5

map

又叫映射(map),go语言中内置的一种类型,同样也是键值对关联

基本语法

var map变量名 map[keyType]valueType

注意key的数据类型不能是slice,map,function,一般是int,string类型

value的数据类型一般是数字(整数,浮点),string,map,结构体

如果只定义map,内存是不会分配其空间的

必须通过make函数进行初始化,才会分配空间

image-20220906161209190

func main(){
// 定义map变量,如果只定义,内存是不会分配其空间的
// 必须通过make函数进行初始化,才会分配空间
var a map[int]string
a=make(map[int]string,10)//可以存放10个键值对
// 存入键值对
a[190501] = "张三"
a[190502] = "李四"
a[190503] = "王s"
a[190503] = "王五"
a[190504] = "王五"
// 输出集合
fmt.Println(a)
}

image-20220906161826037

通过以上例子看出map的特点:

1.map集合在使用时一定要用make函数分配空间

2.map的key-value是无序的(你怎样存入顺序就咋样,不会排序)

3.key不能重复,如果重复,后面的value将会覆盖前面的value(相当于重新赋值),value是可以重复的

创建方式

var a map[int]string
a=make(map[int]string,10)//可以存放10个键值对

2.这种方式可以不指定map的长度

b:=make(map[int]string)

3.直接定义的时候初始化,每个后面都必须加‘ , ’

c := map[int]string{
	190501 : "张三",
	190502 :"李四",
}

操作

增加&修改

var a map[int]string
a=make(map[int]string,10)//可以存放10个键值对
// 增加存入键值对
a[190501] = "张三"
a[190502] = "李四"
a[190503] = "王s"
//修改
a[190503] = "王五"
// 输出集合
fmt.Println(a)

删除

通过内置函数delete()

image-20220906163741903

func main(){
// 定义map变量,如果只定义,内存是不会分配其空间的
// 必须通过make函数进行初始化,才会分配空间
var a map[int]string
a=make(map[int]string,10)//可以存放10个键值对
// 存入键值对
a[190501] = "张三"
a[190502] = "李四"
a[190503] = "王s"
a[190503] = "王五"
a[190504] = "王五"
delete(a,190504)
// 输出集合
fmt.Println(a)
}

image-20220906163915930

清空

go语言不像其他语言提供了清空的函数,要想清空一个map有两种方式

1.遍历map,逐个删除

2.map=make()make一个新的,让原来的称为垃圾,被gc回收

查找

value为对应key的value,bool为是否返回(有对应key返回true,没有为false)

value,bool=map[key]

获取长度

var m map[int]string
m=make(map[int]string,10)
l=len(m)

遍历

只支持for range遍历

var a map[int]string
a=make(map[int]string,10)//可以存放10个键值对
// 存入键值对
a[190501] = "张三"
a[190502] = "李四"
a[190503] = "王s"
a[190503] = "王五"
a[190504] = "王五"
delete(a,190504)
// 输出集合
for k,v:=range a{
	fmt.Printf("a[%v]:%v\n",k,v)
}

image-20220906165251362

当value的类型是map型的时候

b:=make(map[string]map[int]string)
// 赋值
	b["1班"] = make(map[int]string,3)
	b["1班"][1905101] = "小张"
	b["1班"][1905103] = "小郭"
	b["1班"][1905102] = "小王"
	b["2班"] = make(map[int]string,3)
	b["2班"][1905201] = "张三"
	b["2班"][1905203] = "郭龙"
	b["2班"][1905202] = "王菲"

for clas,s :=range b{
	fmt.Println("班级:",clas)
	for k,v:=range s{
		fmt.Printf("学号:%v\t姓名:%v\n",k,v)
	}
}

image-20220906171650869

面向对象

image-20220906172001051

结构体

具体对象:

一位学生:名字,年龄,性别,学号

在java中直接封装成一个学生类,但是go语言中没有类,只能通过结构体实现封装

结构体中可以参照java类有属性和特定的行为(方法)

实例创建

方式一:

type Student struct{
	// 变量名字大写外界可以访问
	Name string
	Age int
	Id int
	Sex string
}
func main(){
	//创建学生结构体的实例
	var w Student
	// 在未赋值时会给初始值给每个属性
	fmt.Println(w)
	w.Name="汪洋"
	fmt.Println(w)
	}

image-20220906173808593

方式2:

var w Student=Student{}
	w.Name="汪洋"
	w.Age=21
//
var w Student=Student{"汪洋",21,1905300111,"男"}

方式三;

var s *Student=new(Student)
//s是指针类型的,实际指向的是一个个地址,应该给这个地址所存的对象进行赋值操作
(*s).Name = "张三"
//go对这种方式提供了简化的赋值方式,下面这样也是可以的
s.Age = 21

方式四:

var s *Student=&Student{}
(*s).Name = "张三"
//go对这种方式提供了简化的赋值方式,下面这样也是可以的
s.Age = 21

结构体之间的转化

前提:

转换时需要完全相同的字段名即里面的属性方法都要相同(名字,个数,类型)

标签:map,string,int,make,基础,Golang,键值,var
From: https://www.cnblogs.com/qwerty-wy/p/16662940.html

相关文章

  • 数据库原理基础一
    数据的分类:结构化数据:有固定的格式,例如一个表格里面的信息非结构化数据:无固定格式,例如图片、网页、语音、视频半结构化数据:html、xml格式的数据数据库:存放数据......
  • 【Java基础】方法重写Override
    1.什么是方法重写子类对父类中同名同参数的方法进行重写覆盖。publicclassPerson{publicvoidsay(){System.out.println("父类中的方法");}}......
  • ASP.NET Core 01基础知识概述
    Program.cs使用Web模板创建的ASP.NETCore应用包含Program.cs文件中的应用程序启动代码。Program.cs文件中包含:已配置应用所需的服务。应用的请求处理管道定义......
  • Golang如何判断接口是否实现
    packagemaintypepeopleinterface{ getage()int}typestustruct{ Ageint Namestring}typestaffstruct{ Ageint Namestring}func(T*stu)......
  • C# 处理多语言的基础类
    1usingNewtonsoft.Json;2usingNewtonsoft.Json.Linq;3usingSystem.IO;4usingSystem.Text;56namespaceTestDemo7{8///<summary>9......
  • new Set()的基础用法(ES6)
    1、什么是Set()Set是es6新增的数据结构,似于数组,但它的一大特性就是所有元素都是唯一的,没有重复的值,我们一般称为集合。Set本身是一个构造函数,用来生成Set数据结构2、......
  • python基础语法
    Python标识符在Python里,标识符由字母、数字、下划线组成。在Python中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。Python中的标识符是区分大小写......
  • 【Java基础】面向对象的特征:继承性
    1.什么是继承继承表示两个类之间的一种关系。子类继承父类,则子类具有父类的属性和方法,同时可以扩展自己属性或功能。子类更具体,父类更抽象。2.为什么要有继承定义两......
  • 复习python基础
    ......
  • 01-linux基础命令
    1、常用命令常用Linux命令的基本使用序号命令对应英文作用01lslist查看当前目录下的内容02pwdprintworkingderectory查看当前所在文件夹03cd[目录......