【Golang学习之旅】Go 语言数据类型详解(string、slice、map等)

news/2025/2/6 18:21:52/

文章目录

    • 前言
    • 1. Go语言数据类型概览
    • 2. Go语言基本数据类型
      • 2.1 整型(int,uint,float)
      • 2.2 布尔类型(bool)
      • 2.3 字符串(string)
    • 3. Go 语言复合数据类型
      • 3.1 数组(Array)
      • 3.2 切片(Slice)
      • 3.3 映射(Map)
    • 4. 结构体(Struct)
    • 5. 指针(Pointer)
    • 总结 & 进阶学习方向

前言

✅ 适合人群:Golang 新手 | 后端开发者 | 面试求职者
✅ 文章亮点:超详细解析 + 代码示例 + 实战应用
✅ 目标:掌握 Go 语言核心数据类型,助你写出高效、稳定的 Go 代码!

1. Go语言数据类型概览

Go语言是一种静态强类型语言,所有变量在使用前都必须指定类型,类型一旦确定,就不能随意更改。Go语言的数据类型大致分为以下几类:

类别数据类型说明
基本类型boolstringintfloat常见的基本数据类型
复合类型array(数组)、slice(切片)存储多个元素的集合
映射类型map(哈希表)键值对存储结构
结构体struct自定义数据结构
接口类型interface{}可用于实现多态
指针类型*T存储变量地址
通道类型chan并发通信机制

🔹 为什么要了解 Go 语言数据类型?
✅ 代码更安全(静态类型检查,减少错误)
✅ 性能更优(高效的内存管理)
✅ 更易维护(强类型保证代码稳定性)

2. Go语言基本数据类型

2.1 整型(int,uint,float)

Go语言支持有符号整数无符号整数

var a int = 10  // 标准int类型(与cpu位数有关)
var b int8 = 127  // 8位整数(-127 ~ 127)
var c uint16 = 65535 // 16位无符号整数(0 ~ 65535)
var d int32 = 2147483647 // 32位整数
var e int64 = 9223372036854775807  // 64位整数

🔹 Go 语言的整数类型取值范围:

类别大小取值范围
int88位-128 ~ 127
uint88位0 ~ 255
int1616位-32,768 ~ 32,767
uint1616位0 ~ 65,535
int3232位-2,147,483,648 ~ 2,147,483,647
uint3232 位0 ~ 4,294,967,295
int6464 位-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
uint6464位0 ~ 18,446,744,073,709,551,615
浮点数(float32、float64)
var pi float32 = 3.1415926  // 32位浮点数
var e float64 = 2.718281828 // 64位浮点数(推荐) 

2.2 布尔类型(bool)

var isGoFun bool = true
fmt.Println(isGoFun) // 输出: true

🔹 布尔值只有 truefalse,不能与 01 互换。

2.3 字符串(string)

Go 语言的 string 是 不可变 的 UTF-8 编码字符串,默认使用双引号"" 定义。

var hello string = "Hello, Golang!"
fmt.Println(hello)

🔹 多行字符串(使用反引号 `)

var multiLine = `第一行
第二行
第三行`
fmt.Println(multiLine)

🔹 字符串拼接

s1 := "Hello"
s2 := "Go"
result := s1 + ", " + s2 + "!"
fmt.Println(result) // 输出: Hello, Go!

3. Go 语言复合数据类型

3.1 数组(Array)

Go 语言数组是 固定大小的,一旦定义后,不能扩展。

var arr [3]int = [3]int{1, 2, 3} // 方式1
arr2 := [...]int{4, 5, 6}        // 方式2
fmt.Println(arr, arr2) 

🔹 遍历数组

for i, v := range arr {fmt.Printf("索引: %d, 值: %d\n", i, v)
}

3.2 切片(Slice)

🔹 切片是 Go 语言最常用的数据结构,类似动态数组,可变长度。

slice := []int{1, 2, 3}
slice = append(slice, 4, 5) // 添加元素
fmt.Println(slice) // [1 2 3 4 5]

🔹 切片截取

subSlice := slice[1:3] // 获取索引 1 到 3 之间的元素
fmt.Println(subSlice) // [2 3]

3.3 映射(Map)

🔹 Map 是 Go 语言中的哈希表(键值对存储)

person := map[string]int{"Alice": 25, "Bob": 30}
fmt.Println(person["Alice"]) // 输出 25person["Charlie"] = 35 // 添加元素
delete(person, "Bob") // 删除元素

🔹 遍历 Map

for k, v := range person {fmt.Printf("Key: %s, Value: %d\n", k, v)
}

4. 结构体(Struct)

🔹 Go 语言支持自定义数据类型(类似面向对象的类)

type Person struct {Name stringAge  int
}func main() {p := Person{Name: "Alice", Age: 25}fmt.Println(p.Name, p.Age) // Alice 25
}

5. 指针(Pointer)

🔹 Go 语言的指针用于存储变量的地址

var a int = 42
var p *int = &a // 指针 p 指向变量 a
fmt.Println(*p) // 通过指针解引用,输出 42

总结 & 进阶学习方向

📌 本篇文章介绍了 Go 语言的常见数据类型,包括 string、slice、map 等,帮助你掌握 Go 语言基础。
📌 进阶学习:Go 并发(Goroutine)、微服务(gRPC)、Web 开发(Gin 框架)
📌 学习资源:Go 官方文档


http://www.ppmy.cn/news/1569867.html

相关文章

CNN的各种知识点(一):卷积神经网络CNN通道数的理解!

卷积神经网络CNN通道数的理解! 通道数的核心概念解析1. 通道数的本质 2. 单张灰度图的处理示例: 3. 批量输入的处理通道与批次的关系: 4. RGB三通道输入的处理计算过程:示例: 5. 通道数的实际意义6. 可视化理解(1) 单通…

HTML基本语法

什么是HTML? HTML是超文本标记语言(HyperText Markup Language)的缩写,是一种用于创建网页的标准标记语言。HTML允许网页设计师通过使用标签来描述网页的结构和内容。 W3C标准 W3C(World Wide Web Consortium)是一…

11.kafka开启jmx

方式一: 1.进入/opt/kafka_2.13-3.3.2/bin目录 命令: cd /opt/kafka_2.13-3.3.2/bin [root@rhel77 ~]# cd /opt/kafka_2.13-3.3.2/bin [root@rhel77 bin]# pwd /opt/kafka_2.13-3.3.2/bin [root@rhel77 bin]# 2.备份kafka-run-class.sh 命令: cp kafka-run-class.sh …

CVPR | CNN融合注意力机制,芜湖起飞!

**标题:**On the Integration of Self-Attention and Convolution **论文链接:**https://arxiv.org/pdf/2111.14556 **代码链接:**https://github.com/LeapLabTHU/ACmix 创新点 1. 揭示卷积和自注意力的内在联系 文章通过重新分解卷积和自…

Linux iostat 命令使用详解

简介 iostat 命令用于监控 Linux 系统输入/输出设备的加载情况。它提供有关CPU 统计信息以及设备和分区的输入/输出统计信息。通过显示 I/O 操作如何影响系统性能,它对于诊断性能瓶颈(例如磁盘或网络活动缓慢)特别有用。 安装 Debian/Ubun…

阿里云 ubuntu22.04 中国区节点安装 Docker

下面是一份在 Ubuntu 22.04 (Jammy) 上,通过阿里云镜像源来安装并配置 Docker 的详细步骤示例,可在中国区阿里云节点使用: 一、卸载旧版本 (如已安装) 如果系统中已经安装了旧版 Docker (可能是 docker、docker-engine、docker.io、containe…

解决open-webui报错Couldn‘t find ffmpeg or avconv

启动open-webui的时候报错Couldnt find ffmpeg or avconv 具体内容: INFO [open_webui.env] Embedding model set: sentence-transformers/all-MiniLM-L6-v2 E:\py311\Lib\site-packages\pydub\utils.py:170: RuntimeWarning: Couldnt find ffmpeg or avconv - d…

1 HBase 基础

1 HBase 基础 1. HBase 基本介绍2. HBase 与 Hadoop 的关系3. RDBMS 与 HBase 的对比4. HBase 特征简要 1. HBase 基本介绍 简介 HBase 是 BigTable 的开源 Java 版本。是建立在 HDFS 之上,提供高可靠性、高性能、列存储、可伸缩、实时读写 NoSql 的数据库系统。 它…