GO语言-06数据类型

简介: 自己学习Go语言学习过程中的记录与总结,希望对你能有帮助。第六篇:学习Go语言的数据类型分为基本类型和派生类型;了解使用new和make分配内存的方式。
初心是记录和总结,自己学习Go语言的历程。如果能帮助到你,这是我的荣幸。

前言

Go语言的数据类是: 值类型派生类型

从常规来说,一般编程语言的数据都可以分成两种类型:

  • 基本数据类型
  • 引用数据类型

其中基本数据类型,是指不需要从内存中开辟空间,因为内存大小已经固定,定义后可以直接赋值进行初始化使用;而引用数据类型是内存大小不确定,需要从内存中开辟空间后才能进行赋值和其他操作。介绍这个只是帮助我们去了解Go语言的类型。

Go语言的值类型就好比基本数据类型,定义后直接赋值;但Go语言的派生类型不能用引用类型一概而论了

值类型

Go语言有如下常用的值类型

类型 长度(字节) 默认值 说明
bool 1 false 布尔
byte 1 0 uint8
rune 4 0 Unicode Code Point, int32
int, uint 4或8 0 整型;32 或 64 位
float32 4 0.0
float64 8 0.0
array 数组
string “” UTF-8 字符串

派生类型

我想Go语言这样划分类型,可能是这样想的:简单的类型-值类型复杂的类型-派生类型,我们依然带着有些类型是需要开辟内存的思想,再给派生类型分一下,方便记忆

  • 引用类型:slicemapchan
  • 接口:interface
  • 函数:func
  • 指针
  • 结构体
这里我们先知道在Go语言中是有这样一些派生类的存在,在这并不展开详细介绍。

开辟空间方式

学过面向对象思想的,我们应该懂得通过new关键字在内存开辟空间给指定类型。虽然Go语言并不是面向对象的语言,但是Go语言为我们提供了两种内存分配的方式:

  • new:func new(Type) *Type
  • make:func make(t Type, size ...IntegerType) Type

通过定义,可以了解到new比较容易理解:给定一个类型,返回的是指向该类型的指针。而make我们通过官方包介绍来看一下:

image.png

解读:

我们再次摘录下它的函数定义,方便我们理解:
func make(t Type, size ...IntegerType) Type

首先,make函数是专门为了给slicemapchan这三种类型分配内存并初始化。函数的参数:

  • t Type表示类型
  • size表示长度
  • ...IntegerType表示容量

例如:

make([]int, 0, 10) // 大小为10,并返回一个长度为0、容量为10的切片
make(map[string]int, 8) // 分配容量为8的,存放key为string类型的,value为int类型的map
make(chan int, 8) //缓存区大小为8,传递整型的通道
我们有提到 make可以初始化。所以,通过 make函数创建的类型已经自动帮我们初始化了。

顺便提一嘴,在Go语言中空表示为nil,所以slicemapchan默认定义后未分配内存时都是为nil,对nil操作的时候会报错。这就体现出make的好处来了。

目录
相关文章
|
9天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
45 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
29天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
40 7
|
29天前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
29天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
101 71
|
28天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
105 67
|
1月前
|
Go 索引
go语言for遍历数组或切片
go语言for遍历数组或切片
101 62
|
1月前
|
并行计算 安全 Go
Go语言中的并发编程:掌握goroutines和channels####
本文深入探讨了Go语言中并发编程的核心概念——goroutine和channel。不同于传统的线程模型,Go通过轻量级的goroutine和通信机制channel,实现了高效的并发处理。我们将从基础概念开始,逐步深入到实际应用案例,揭示如何在Go语言中优雅地实现并发控制和数据同步。 ####
|
4天前
|
算法 安全 Go
Go 语言中实现 RSA 加解密、签名验证算法
随着互联网的发展,安全需求日益增长。非对称加密算法RSA成为密码学中的重要代表。本文介绍如何使用Go语言和[forgoer/openssl](https://github.com/forgoer/openssl)库简化RSA加解密操作,包括秘钥生成、加解密及签名验证。该库还支持AES、DES等常用算法,安装简便,代码示例清晰易懂。
31 12
|
29天前
|
存储 Go
go语言中映射
go语言中映射
36 11
|
1月前
|
Go
go语言for遍历映射(map)
go语言for遍历映射(map)
35 12