当前位置: 首页 > news >正文

Go学习笔记之数据类型

文章目录

  • GO数据类型
    • 数组array
    • 切片slice
    • 集合map
    • 结构体
    • make和new

GO数据类型

  • 在go语言中,定义的全局数据结构不使用不会报错,定义的局部数据结构必须使用,否则报错;建议定义的数据类型就要使用,要么不定义。

数组array

类似于python的list,有下标查找方法

  • array与list的区别:
    • array是固定长度的数组,没有append、pop等方法;
    • array作为值传入函数或者是赋值给变量的是原始值拷贝不会,任何修改不会影响原始值;
var l1 [5]int = [5]int{1, 2, 3, 4, 5} //定义
l2 := [5]int{1, 2, 3} //初始化(:= 只能用于函数内部)

切片slice

可以进行切割的数组, 能使用append方法,使用后会返回添加后的切片,slice是底层数组,作为值作为值传入函数或者是赋值给变量时会改变原始值。

var s []string
var s []string = ['a', 'b']
b = s[:2] //前包后不包
s = append(s, "c") //增大了切片的最大容量,len(s)是4,cap(s)是6

集合map

类似与python的字典,能通过key进行增删改查

  • map与dict的区别:

    • map是无序的key-value集合,遍历时会无序的返回,而dict是有序的,按顺序遍历;
    • map定义时要说明key和value的类型,dict不需要;
    • map通过键获取键值时,如果键不存在,则返回该键类型的0值,如:键是int类型的返回值是0;而dict通过键获取值,键不存在,则会报错,使用get方法获取时返回None;
  • 注意:

    • map定义时必须要初始化,或者使用make来分配内存,否则会报错因为没有分配内存空间;
    • map是应用类型,如果将他传递给一个函数或是赋值给另一个变量,他们指向的都是底层数据结构,一个变化都会变化;
var m = map[int]string{1: "a",2: "b", //结尾括号另起一行时结尾需要有“,”同一行则不需要 
}var m1 = make(map[int]string)m1 := make(map[int]string) //:=用于函数内部
m1[1] = "a"
// m = {1: "a", 2: "b"} //不允许这种赋值方式

结构体

结构体自定义数据类型的属性和方法,是go实现面向对象的方法,通过type来定义

type Person struct{name stringage int
}var person Person //实例化结构体,实例化才会分配内存,才能调用内部的属性和方法 

要创建结构体的方法,需要将结构体作为接收者来定义函数,此时该函数就是该结构体的方法

  • 接收者有值接收者和指针接收者,当是值类型接收者时,实例化不能改变当前实例的属性或方法,指针类型接收者则能改变
type Person struct{Name stringAge int
}//receiver是值类型
func (p Person) SetName(word string) {p.Name = word
}//receiver是指针类型
func (p *Person) SetAge(age int){p.Age = age
}var p1 Person
p1.SetName("lili")
fmt.Println(p1.Name) //空字符串
p1.SetAge(12)
fmt.Println(p1.Age) //12
  • 注意:结构体的属性和方法首字母为大写才能被模块外调用,否则只能在模块内调用

make和new

make和new都可以给定义的数据类型分配空间

  • 区别:
    • make只能给slice、map、channel分配空间;
    • make分配完后返回的是数据类型的值,是对数据类型的初始化,new返回的是指针;
    • 很少使用到new
http://www.lryc.cn/news/129782.html

相关文章:

  • Spring Cloud 微服务
  • SpringBoot属性配置
  • 算法通关村第十关 | 归并排序
  • SpringBoot3集成Kafka
  • css学习1
  • rust踩雷笔记(1)——切片传参和解引用赋值
  • 安全 1自测
  • 寻路算法小游戏
  • CSS基础 知识点总结
  • 自动执行探索性数据分析 (EDA),更快、更轻松地理解数据
  • 【自定义系统服务】【android13】添加自定义java系统服务
  • 【Sklearn】基于随机梯度下降算法的数据分类预测(Excel可直接替换数据)
  • 44、TCP报文(二)
  • 目标检测(Object Detection)
  • vue中实现文字检索时候将搜索内容标红
  • PCL protocol composition logic
  • 聊聊看React和Vue的区别
  • OSPF在广播类型的网络拓扑中DR和BDR的选举
  • 系统学习Linux-Mariadb高可用MHA
  • 慢SQL的原因
  • php正则替换文章的图片
  • 57 | TAPTAP客户端分析
  • 开源了一套基于springboot+vue+uniapp的商城,包含分类、sku、商户管理、分销、会员、适合企业或个人二次开发
  • Android进阶之多级列表
  • Stochastic: Distribution-Expectation-Inequalities
  • Java算法_ 二叉树的最大深度(LeetCode_Hot100)
  • 行业追踪,2023-08-18
  • js将项目中的图片上传到服务器
  • 【C语言】指针的进阶
  • 【Windows系统编程】03.远线程注入ShellCode