Oracle(2-11)RMAN Backups
文章目录
- 一、基础知识
- 1、RMAN Backup Concepts RMAN备份概念
- 2、RMAN Backup Modes RMAN备份的类型
- 3、Backup File Types 备份文件类型
- 4、RMAN Backup Destinations RMAN备份目标
- 5、Backup Constraints 备份约束
- 6、Recovery Manager Backups 恢复管理器备份
- 7、Characteristics of BS BS的特点
- 8、Backup Piece 备份片
- 9、Backup Issues 备份问题
- 10、Control File and SP File 控制文件和SP文件
- 11、Backing Up the SP File 备份SP文件
- 12、Archived Redo Log Back Sets 归档重做日志的备份集
- 13、Backup Database Plus Archivelog 备份数据库和归档日志
- 14、Duplexed Backup Sets 双重备份集
- 15、Characteristics of lmage Copy 镜像拷贝特性
- 16、Making Incremental Backups 进行增量备份
- 17、Monitoring RMAN Backups 监控RMAN备份
- 二、基础操作
- 1、完整备份数据库
- 2、查看数据库结构并指定数据文件备份
- 3、备份控制文件的方法
- 方法1.修改RMAN参数
- 方法2.直接使用命令备份
- 方法3.在备份其他文件的时候使用子句备份
- 方法4.修改控制文件数据
- 4、备份spfile文件
- 方法1.在RMAN中执行命令
- 方法2.修改RMAN参数
- 5、备份归档日志文件
- 方法1.使用命令备份
- 方法2.在备份其他文件是附加备份
- 6、并发备份数据库的实现
- 方法1.使用命令实现多通道并发备份
- 方法2.修改参数实现多通道并发
- 7、双重备份的实现
- 方法1.RMAN命令实现
- 方法2.修改RMAN参数
- 8、镜像拷贝实现
- 9、增量备份
- 做0级备份
- 做1级备份
- 累积性差量备份
- 总结
- 10、自定义标签
RMAN Backups RMAN 备份
目标:
- 了解RMAN特定备份的类型
- 使用RMANBACKUP命令创建备份集
- 备份控制文件
- 备份存档的重做日志文件
- 使用RMAN copy命令创建映像副本
一、基础知识
1、RMAN Backup Concepts RMAN备份概念
- 恢复管理器备份是服务器管理的备份
- 恢复管理器使用Oracle服务器会话备份操作
- 可以备份整个数据库、表空间中的所有数据文件、选定的数据文件、控制文件、存档的重做日志文件
- 封闭式数据库备份(冷备份)
- 必须装入目标数据库(未打开)
- 包括数据文件、控制文件、归档重做日志文件
- 开放式数据库备份(缺点)
- 不应将表空间置于备份模式
- 包括数据文件、控制文件、归档重做日志文件
2、RMAN Backup Modes RMAN备份的类型
- 完全备份与增量备份:完全备份是数据文件的备份,其中包括该文件中的每个已分配块。请注意,数据文件的映像副本备份将始终包括该文件中的每个块。但是,将数据文件备份为备份集时,可能会跳过未使用的数据块。增量备份可以是两个不同级别中的一个:0级备份包括数据文件中的所有块(因从未使用而被压缩的块除外) ,或1级备份仅包括自父备份以来更改过的块。
- 一致性与不一致性备份:在数据库完全正常关闭 (与使用shutdownabort命令或在数据库突然崩溃后关闭相反)并在装入状态下重新启动后进行的备份称为一致性备份。在还原数据库后,一致备份不需要恢复。在数据库联机时或在数据库突然关闭后进入装入状态后执行的备份称为不一致备份。不一致的备份始终需要恢复以使备份一致。
3、Backup File Types 备份文件类型
- Tablespaces 表空间
- Datafiles (current or copy) 数据文件 (当前或副本)
- Control file (current or copy) 控制文件 (当前或副本)
- Spfiles
- Archived logs 归档日志文件
- Backup sets 备份集
4、RMAN Backup Destinations RMAN备份目标
- 任何磁盘目录,包括自动存储管理 (ASM)磁盘组。
- 一个介质管理库 (磁带设备)。
- 闪存恢复区域,这是Oracle基于磁盘的备份和恢复策略的核心。闪回恢复区是一个完全保留的磁盘区域,用于备份和恢复,以及存储闪回日志,闪回日志用于支持闪回数据库特性。
5、Backup Constraints 备份约束
- 必须置数据库于mount或open状态。
- 不支持联机重做日志备份。
- 只有“干净”备份可用于NOARCHIVELOG模式。
- 只有当前的数据文件备份可以在ARCHIVELOG模式下使用。
6、Recovery Manager Backups 恢复管理器备份

7、Characteristics of BS BS的特点
- BACKUP命令创建备份集
- 备份集通常包含多个文件
- 备份集可以写入磁盘或磁带
- 需要执行还原操作才能从备份集中提取文件
- 数据文件备份集可以是增量备份集,也可以是完全备份集
- 备份集不包括从未使用过的块
8、Backup Piece 备份片
- 备份片段是备份集中的文件
- 备份片段可以包含来自多个数据文件的块

- Backup Piece Size 备份片的大小
- 备份片大小可以限制如下:
RUN {ALLOCATE CHANNEL t1 TYPE 'SBT' MAXPIECESIZE = 4G;BACKUPFORMAT 'df_ %t_%s_%p' FILESPERSET 3(tablespace users); }
9、Backup Issues 备份问题
- Backup datafiles
- Backup tablespaces
- Backup the control file
- Backup the server parameter file
- Backup the archived log files
10、Control File and SP File 控制文件和SP文件
- 使用CONFIGURE CONTROLFILE AUTOBACKUP命令来启用
- 当启用时,RMAN在BACKUP或COPY命令后自动执行控制文件和当前服务器参数文件的备份
- 对数据库进行结构性更改后也会进行备份
- 备份具有默认名称
11、Backing Up the SP File 备份SP文件
- 配置时自动备份 CONTROLFILE AUTOBACK = ON
- 使用BACKUPSPFILE显式备份:
BACKUP COPIES 2 DEVICE TYPE sbt SPFILE;
12、Archived Redo Log Back Sets 归档重做日志的备份集
- 仅包括归档的重做日志文件
- 始终是完整备份:
BACKUP
FORMAT '/u01/app/oracle/backup/ar_%t_%s_%p'
ARCHIVELOG ALL DELETE ALL INPUT;
- 联机重做日志文件切换是自动的
- 执行归档日志故障转移
- 备份需要备份的归档日志
13、Backup Database Plus Archivelog 备份数据库和归档日志
- 在我们备份归档日志的时候,我们的数据库干了如下的事情
1.运行alter system archive log current 命令
2.运行 backup archivelog all 命令
3.备份backup database命令指定的其余数据文件
4.运行 alter system archive log current命令
5.备份备份操作期间生成的新归档日志
14、Duplexed Backup Sets 双重备份集

15、Characteristics of lmage Copy 镜像拷贝特性
- 只能写入磁盘
- 可立即用于恢复;不需要恢复
- 是单个数据文件、归档日志或控制文件的物理副本
- 镜像是操作系统备份 (包含所有块)
- 可以是增量策略的一部分
16、Making Incremental Backups 进行增量备份
- 完整备份包含所有数据文件块
- 差异增量备份仅包含级别n或更低的修改块
- 累积增量备份仅包含级别n-1或更低的已修改块

- 增量备份分为0-4五个级别
- 0级备份相当于全备
17、Monitoring RMAN Backups 监控RMAN备份
- 使用SET COMMAND ID命令将服务器会话与通道关联起来
- 查询V$PROCESS和V%SESSION,以确定哪些会话对应于哪些RMAN信道。
- 查询V&SESSION_LONGOPS 来监视备份和副本的进度。
- 使用操作系统实用程序监视进程或线程
二、基础操作
1、完整备份数据库
进入RMAN
rman target sys/123@orcl nocatalog
开始备份
格式:
backup database format 要备份的地址目录/md_%U
backup database format '/u01/app/oracle/backup/md_%U';

注意这里的备份命令只是备份了数据库,没有备份归档日志文件
正常做全备我们还需要备份归档日志文件,经常使用以下命令:
backup database plus archivelog format '/u01/app/oracle/backup/db_%U';

进入到备份目录下查看备份文件(这里做的是没有备份归档日志那个命令的展示效果,如果是使用备份归档日志文件的命令,文件名会以db开头)

查看备份记录
list backup;

删除备份
# 删除所有备份
DELETE BACKUP;
删除指定片的备份
格式:delete backupset 片号(也就是list backup查询记录最前边显示的BS值)
delete backupset 1,2;
2、查看数据库结构并指定数据文件备份
report schema;

我们可以查看到当前数据库结构如图所示
然后我们对其中任何一个都可以进行单独备份
backup datafile 4 format '/u01/app/oracle/backup/md_%U';
这里的4就是上面我们查看数据库结构文件序号,如果将这里的4换成文件路径也是可行的
backup datafile '/u01/app/oracle/oradata/orcl/users01.dbf' format '/u01/app/oracle/backup/md_%U';



3、备份控制文件的方法
方法1.修改RMAN参数
show all;

默认是关闭,我们需要打开就行了
CONFIGURE CONTROLFILE AUTOBACKUP ON;

这样在每次备份的时候都会对参数文件进行备份
方法2.直接使用命令备份
这里有两种方法,一种是用cp命令拷贝控制文件,这种没什么说的
第二种就是在RMAN下执行命令:
backup current controlfile;

可以看到已经备份到这里了
cd /u01/app/oracle/fast_recovery_area/ORCL/autobackup/2023_12_03
我们切换到这里目录查看一下(每个人的可能不一样,根据备份完成之后的信息提示进行切换)

我们可以看到已经备份完成
方法3.在备份其他文件的时候使用子句备份
我们需要在备份其他文件的时候加上include current controlfile
backup datafile 4 include current controlfile;

我们可以看到在备份数据文件4的时候同时备份了控制文件

方法4.修改控制文件数据
sql "alter database backup controlfile to ''/tmp/wilson.bin''";
这里两个单引号是转义符的作用

切换到tmp目录下查看备份的控制文件

4、备份spfile文件
方法1.在RMAN中执行命令
backup spfile format '/u01/app/oracle/backup/md_%U';

- 其实通过上图和控制文件备份图片我们可以看出,当我们备份控制文件时也会默认备份spfile,我们备份spfile时也会默认备份控制文件,并且将他们两个打包成一个备份文件

方法2.修改RMAN参数
CONFIGURE CONTROLFILE AUTOBACKUP ON;
这里和控制文件自动备份是通一个参数,因为spfile和控制文件默认是一起进行备份的
5、备份归档日志文件
方法1.使用命令备份
BACKUP ARCHIVELOG
FORMAT '/u01/app/oracle/backup/ar_%t_%s_%p';
DELETE ALL INPUT的作用是删除原来的东西,对于我这个命令而言就是删除/u01/app/oracle/backup/目录下的东西,然后在将归档日志文件备份到里面,all命令就是备份所有的归档日志文件,增加完参数就是下面这条命令:
BACKUP ARCHIVELOG ALL
FORMAT '/u01/app/oracle/backup/ar_%t_%s_%p'
DELETE ALL INPUT;

我们可以看到归档日志文件已经备份完成

方法2.在备份其他文件是附加备份
backup database plus archivelog format '/u01/app/oracle/backup/db_%U';
- 以上示例是在对数据库备份的时候对归档日志文件备份

6、并发备份数据库的实现
方法1.使用命令实现多通道并发备份
三通道备份实现
run {allocate channel c1 type disk;allocate channel c2 type disk;allocate channel c3 type disk;backup incremental level=0format '/u01/app/oracle/backup/p_%u'(datafile 1 channel c1 tag='sys')(datafile 2 channel c2 tag='aux')(datafile 3,4,5 channel c3 tag='other');sql 'alter system archive log current';
}

在操作的过程中我们能明显的感觉到速度比单通道备份快了许多。
关于数据文件编号查询:
我们需要进入数据库
然后执行select file#, name from v$datafile;查看编号
对于格式比较乱我们可以进行一些整理col name format a50;
前边的这些就是我们进行并发备份时数据文件的编号
方法2.修改参数实现多通道并发
我们先查看一下当前参数
show all;

通过查看参数我们可以看到当面默认并发度是1
修改参数为3:
CONFIGURE DEVICE TYPE DISK PARALLELISM 3 BACKUP TYPE TO BACKUPSET;

这个时候我们在做一次完备进行测试
backup database plus archivelog format '/u01/app/oracle/backup/db_%U';


发现启动了3个通道进行备份,说明修改参数实现了并发备份
最后测试完成之后我从新关闭了并发,这里不关也可以

7、双重备份的实现
方法1.RMAN命令实现
这里首先需要创建两个文件,我直接新创两个文件b1,b2作为两个备份文件的存放地点
mkdir /u01/app/oracle/b1;
mkdir /u01/app/oracle/b2;

开始备份
backup copies 2 datafile 5 format '/u01/app/oracle/b1/d_%U','/u01/app/oracle/b2/d_%U';
代码解释copies 2表示双重备份,如果要备份三个就需要将2改成3就可以了,
datafile 5表示对数据文件5进行备份

我们可以看到我们对数据文件进行了双重备份

方法2.修改RMAN参数
参看RMAN参数
show all;

我们可以看到当前默认只备份一份
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 2;
将参数修改成2就可以实现双重备份了

8、镜像拷贝实现

copy datafile 5 to '/u01/app/oracle/b2/wilson.dbf' tag='example';


查看拷贝历史
list copy;

9、增量备份
做0级备份
run {allocate channel c1 type disk;backup incremental level 0 database format '/u01/app/oracle/backup/l0_%u';
}


可以看到我们刚刚做的备份级别是0级备份,大小1.08G
做1级备份
run {allocate channel c1 type disk;backup incremental level 1 database format '/u01/app/oracle/backup/l1_%u';
}



我们发现1级备份大小小于0级备份
注意:当我们从来没有做过0级备份时,做1级备份时会首先自动做一次0级备份
累积性差量备份
累积性需要在级别后边加cumulative
run {allocate channel c1 type disk;backup incremental level 1 cumulative database format '/u01/app/oracle/backup/l1c_%u';
}

我们可以发现l1c文件比l1文件大,因为累积性差量备份多了一些重复的数据
总结
备份类型:
- 完全备份包含所有使用的数据文件块。
- 0 级增量备份等同于标记为 0 级的 完全备份。 累积 1 级增量备份只包含自上次 0 级增量备份以来修改过的块。
- 差异 1 级增量备份只包含自上次增量备份以来修改过的块。(默认1级备份就是差异备份)
- 2级累积增量备份上次任意级别备份至今的增量(任意一次备份至今)

10、自定义标签
backup incremental level 1 cumulative database format '/u01/app/oracle/backup/l1_%u' tag='zidingyibiaoqian';

我们查看我们备份的备份集
list backup;

查到标签之后我们可以进行标签查询备份信息
list backup tag='zidingyibiaoqian';

灵活运用标签能够很好的管理备份集
相关文章:
Oracle(2-11)RMAN Backups
文章目录 一、基础知识1、RMAN Backup Concepts RMAN备份概念2、RMAN Backup Modes RMAN备份的类型3、Backup File Types 备份文件类型4、RMAN Backup Destinations RMAN备份目标5、Backup Constraints 备份约束6、Recovery Manager Backups 恢复管理器备份7、Characteristics …...
使用docker搭建『Gitea』私有仓库
文章目录 一、安装 docker 环境1、移除以前的 docker 相关包2、配置yum源3、安装 docker4、启动 docker 二、安装 docker compose1、安装docker compose2、赋予下载的docker-compose执行权限 三、安装 gitea1. 创建工作目录2. 创建 Docker Compose 文件3. 启动 Gitea4. 访问 Gi…...
CopyOnWriteArrayList怎么用
什么是CopyOnWriteArrayListCopyOnWriteArrayList常用方法CopyOnWriteArrayList源码详解CopyOnWriteArrayList使用注意点CopyOnWriteArrayList存在的性能问题CopyOnWriteArrayList 使用实例基本应用实例并发应用实例 拓展写时复制 什么是CopyOnWriteArrayList CopyOnWriteArra…...
旋转设备状态监测与预测性维护:提高设备可靠性的关键
在工业领域的各个行业中,旋转设备都扮演着重要的角色。为了确保设备的可靠运行和预防潜在的故障,旋转设备状态监测及预测性维护变得至关重要。本文将介绍一些常见的旋转设备状态监测方法,并探讨如何利用这些方法来实施预测性维护,…...
类和对象——(7)this指针
归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言📝 人生就像骑单车,想保持平衡…...
回溯算法题型分类
题型一:排列、组合、子集相关问题 提示:这部分练习可以帮助我们熟悉「回溯算法」的一些概念和通用的解题思路。解题的步骤是:先画图,再编码。去思考可以剪枝的条件, 为什么有的时候用 used 数组,有的时候设…...
ApplicationRunner 类
优质博文:IT-BLOG-CN 在开发中可能会有这样的情景。需要在容器启动的时候执行一些内容。比如读取配置文件,数据库连接之类的。SpringBoot给我们提供了两个接口来帮助我们实现这种需求。这两个接口分别为CommandLineRunner和ApplicationRunner。他们的执…...
QT中的 容器(container)-大全
一、介绍 Qt库提供了一套通用的基于模板的容器类,可以用这些类存储指定类型的项。比如,你需要一个大小可变的QString的数组,则使用QVector<QString>。 这些容器类比STL(C标准模板库)容器设计得更轻量、更安全并…...
Docker配置镜像加速器
Ubuntu 安装/升级Docker客户端 推荐安装1.10.0以上版本的Docker客户端,参考文档docker-ce配置镜像加速器 针对Docker客户端版本大于 1.10.0 的用户 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器 sudo mkdir -p /etc/docker sudo t…...
飞致云1panel + 雷池WAF
可能有许多人都有这个需求:为自己的个人站点套上WAF,增加安全性,本文将介绍如何将1panel面板深度结合长亭雷池防火墙,实现为个人站点套上WAF并且自动续签ssl证书。 前提条件: 服务器IP已绑定域名 完整的1panel环境 …...
策略梯度简明教程
策略梯度方法 (PG:Policy Gradient) 是强化学习 (RL:Reinforcement Learning) 中常用的算法。 1、从库里的本能开始 PG的原理很简单:我们观察,然后行动。人类根据观察采取行动。 引用斯蒂芬库里的一句话: 你必须依靠…...
鸿蒙原生应用/元服务开发-利用picker选择器来多选相册图片
前言 在之前的时候,测试一个应用进入相册选择图片demo,利用了startAbilityForResult()方法,启动相对应的Ability来完成效果,但是这种方法有限制,一次只能获取一张图片,在完成某些功能测试的时候就很不方便。…...
java:封装统一的响应体code、data、msg、paging
背景 我们在写接口的时候一般不会直接返回给前端数据,而是会有响应体,比如 code、data、msg,这样就有一个统一的结构方便前端处理,那么今天就来封装一个统一的响应体 封装基本响应体 1、在 config 包里新建 ApiResponse.java …...
leetcode算法之栈
目录 1.删除字符串中的所有相邻重复项2.比较含退格的字符串3.基本计算器II4.字符串解码5.验证栈序列 1.删除字符串中的所有相邻重复项 删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {string ret;//使用数组模拟栈操作for(auto …...
电脑上mp4视频文件无缩略图怎么办
前言:有时候电脑重装后电脑上的mp4视频文件无缩略图,视频文件数量比较多的时候查找比较麻烦 以下方法亲测有效: 1、下载MediaPreview软件 2、软件链接地址:https://pan.baidu.com/s/1bzVJpmcHyGxXNjnzltojtQ?pwdpma0 提取码&…...
【Centos8】配置网络镜像源
文章目录 配置 yum 源配置网络 yum 源备份下载阿里 centos-base.repo 到 /etc/yum.repos.d/安装 EPEL 源测试安装 配置 yum 源 # 检查是否安装了 yum rpm -qa|grep yum# 查看本地已安装的所有软件包 yum list installed# 查看软件包安装位置 # 查看某个东西的软件包 rpm -qa|g…...
深入学习Synchronized各种使用方法
文章目录 前言一、synchronized关键字通用在下面四个地方:1.1synchronized修饰实例方法1.2synchronized修饰静态方法:1.3synchronized修饰实例方法的代码块1.4synchronized修饰静态方法的代码块2.读入数据 二.Sychronized关键特性2.1互斥2.2 刷新内存2.3…...
【idea】设置鼠标滚轮控制缩放大小
1、点击file 选择Setting 2、点击Editor 下面的 General 3、勾选 Mouse Control 下面的 Change font size with CtrlMouse Wheel in 4、点级apply 5、按 ctrl键 鼠标滚轮缩放字体的大小...
合并两个有序数组(leetcode_刷题1)
目录 题目:合并两个有序数组 题目分析方向1: 题目分析方向2: 题目:合并两个有序数组 题目要求: 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums…...
麒麟linux将图片批量生成PDF的方法
笔者手里有一批国产linu系统,目前开始用在日常的工作生产环境中,我这个老程序猿勉为其难的充当运维的或网管的角色。 国产linux系统常见的为麒麟Linux,统信UOS等,基本都是基于debian再开发的linux。 问题描述: wind…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...

