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

【Go语言入门:Go语言的数据结构】

文章目录

  • 3.Go语言的数据结构:
    • 3.1. 指针
    • 3.2. struct(结构体)
    • 3.3. Map(映射,哈希)

3.Go语言的数据结构:

简介:
在Go语言中,数据结构体可以分为四种类型:基础类型、聚合类型、引用类型和接口类型。下面是对这四种类型的介绍:

  1. 基础类型:包括整型(有符号和无符号整数)、浮点数、复数、字符串(由不可变的字节序列构成)、布尔值(只有true和false两个值)。
  2. 聚合类型:包括数组和结构体。其中,结构体是由任意个任意类型的变量组合在一起的数据类型。
  3. 引用类型:包括指针、Slice(是一个拥有相同元素的可变长度序列)、map、function和channel。
  4. 接口类型:用于定义接口,实现接口可以获得多态性。

其中基础类型比较简单就不过多介绍,重点是其他几种类型

3.1. 指针

在 Go 语言中,指针是一种用于引用其他变量的变量。通过使用指针,你可以间接访问或修改指向变量的值。

  1. 指针的声明使用*操作符,例如:
var x int = 10
var p *int = &x

在上面的示例中,x是一个整数变量,而p是一个指向整数的指针变量。通过&x,将x的地址赋值给p。

  1. 使用指针可以通过*操作符来间接访问指向变量的值:
fmt.Println(*p) 

通过*p,可以获取p所指向变量x的值。

  1. 指针还可以用于修改指向变量的值:
*p = 20 

通过*p = 20,将 20 赋值给p所指向变量x。
需要注意的是,使用指针时要确保指针指向的变量类型与指针的类型相匹配,否则会导致编译错误。

3.2. struct(结构体)

在 Go 语言中,结构体(struct)是一种用户自定义的数据类型,可以用来组织多个不同类型的数据成员。

  1. 结构体的声明使用struct关键字,例如:
type Person struct {Name stringAge  int
}

在上面的示例中,定义了一个名为Person的结构体,它包含了两个数据成员:Name(字符串类型)和Age(整数类型)。

  1. 创建结构体变量并赋值:
p := Person{Name: "Alice",Age:  25,
}
  1. 可以通过点号操作符来访问和修改结构体成员的值:
fmt.Println(p.Name) 
fmt.Println(p.Age) p.Age = 30fmt.Println(p.Age) 
  1. 结构体还可以用于嵌套其他结构体:
type Address struct {Country stringCity    string
}type Person struct {Name stringAge  intAddress
}

在上面的示例中,Person结构体包含了一个嵌套的Address结构体。

  1. 结构体还可以实现方法:
type Person struct {Name stringAge  int
}func (p Person) SayHello() {fmt.Println("Hello, my name is", p.Name)
}

在上面的示例中,为Person结构体实现了一个名为SayHello的方法。

类比其他语言,struct相当于java中的类,区别是在go语言中struct中只写变量,并不写方法,具体含有的方法是根据方法在其他地方添加给他,具体看方法的介绍

3.3. Map(映射,哈希)

在 Go 语言中,映射(map)是一种无序的键值对数据结构。它用于存储一组键值对,其中键可以是任何类型,而值可以是任何类型。

  1. 映射的声明使用map关键字,例如:
var m map[string]int

在上面的示例中,创建了一个名为m的空映射,其中键的类型为字符串,值的类型为整数。

  1. 向映射中添加键值对:
m["key"] = value
  1. 通过键来访问映射中的值:
value, ok := m["key"]
  1. 使用delete函数来删除映射中的键值对:
delete(m, "key")
  1. len函数返回映射中键值对的数量:
count := len(m)

需要注意的是,映射中的键必须是可哈希的,因为映射是基于哈希表实现的。这意味着你不能使用函数、切片或映射作为映射的键。

今天先更新这么多,下次补全切片与数组,channel,接口等。

http://www.lryc.cn/news/270512.html

相关文章:

  • QT designer的ui文件转py文件之后,实现pycharm中运行以方便修改逻辑,即添加实时模板框架
  • 什么是负载均衡?
  • Python和Java的优缺点
  • AES - 在tiny-AES-c基础上封装了2个应用函数(加密/解密)
  • 51和32单片机读取FSR薄膜压力传感器压力变化
  • 【maven】pom.xml 文件详解
  • SpringMVC源码解析——DispatcherServlet初始化
  • 搞定Apache Superset
  • 【每日试题】java面试之ssm框架
  • Flutter 疑难杂症集合
  • PHP序列化总结1--序列化和反序列化的基础知识
  • 【Linux】 last 命令使用
  • Git 分布式版本控制系统(序章1)
  • 给WordPress网站添加返回顶部按钮
  • App Inventor 2 接入短信服务,实现短信验证码功能
  • Linux环境grep搜索方法记录
  • C语言-破解密码
  • ffmpeg 解码文件时的时间戳问题
  • Java企业电子招投标系统源代码,支持二次开发,采用Spring cloud框架
  • [python]基于faster whisper实时语音识别语音转文本
  • 2023纠结中前行? 2024继续还是放下?
  • 原型链补充
  • 《Linux Nano命令详解:小而强大的文本编辑器》
  • 系列四、Eureka自我保护
  • C++回调函数-实操(二)
  • MySQL中常用的用户授权操作
  • LabVIEW开发智能火灾自动报警系统
  • Vagrant使用教程
  • 【Java】ThreadLocal原理与使用场景
  • 软件测试/测试开发丨Linux进阶命令(curl、jq)