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

GO 的 Web 开发系列(六)—— 遍历路径下的文件

文件 IO 处理是程序的基础功能,WEB 程序中通过文件 IO 实现附件的上传与下载。在 GO 中,有多种方式可以遍历文件目录,获取文件路径,本文从使用层面上论述这些函数。

预先准备一个包含子目录的目录,用于遍历测试:

文件目录

一、filepath.Walk 函数

使用 filepath.Walk 函数可以很方便的遍历目录下的多级子文件和目录。

代码示例:

func main() {rootPath := "./docs"_ = filepath.Walk(rootPath, func(path string, info os.FileInfo, err error) error {fmt.Printf("name: %s, isDir: %t, path: %s\n", info.Name(), info.IsDir(), path)return nil})
}

输出结果:

name: docs, isDir: true, path: ./docs
name: admin, isDir: true, path: docs\admin
name: admin_docs.go, isDir: false, path: docs\admin\admin_docs.go
name: admin_swagger.json, isDir: false, path: docs\admin\admin_swagger.json      
name: admin_swagger.yaml, isDir: false, path: docs\admin\admin_swagger.yaml      
name: application.yaml, isDir: false, path: docs\application.yaml
name: content, isDir: true, path: docs\content
name: content_docs.go, isDir: false, path: docs\content\content_docs.go
name: content_swagger.json, isDir: false, path: docs\content\content_swagger.json
name: content_swagger.yaml, isDir: false, path: docs\content\content_swagger.yaml

二、os.ReadDir 函数

ReadDir 函数仅遍历当前目录下的子文件和目录,不会递归遍历,如果需要多级遍历则需要自己实现。

该函数有两个实现,分别为 os.ReadDirioutil.ReadDir ,两个函数结果相同。在文件数量多的情况下, os.ReadDir 的性能会更好。新版本 Go 中 ioutil.ReadDir 已经被标记废弃了,不推荐使用。

代码示例:

func main() {rootPath := "./docs"files, err := os.ReadDir(rootPath)if err != nil {fmt.Println(err)}for _, file := range files {fmt.Printf("name: %s, isDir: %t, path: %s\n", file.Name(), file.IsDir(), rootPath+"/"+file.Name())}
}

输出结果:

name: admin, isDir: true, path: ./docs/admin
name: application.yaml, isDir: false, path: ./docs/application.yaml
name: content, isDir: true, path: ./docs/content

三、filepath.Glob 函数

filepath.Glob 函数仅遍历当前目录下的子文件和目录,不会递归遍历,但可以使用通配符对遍历的文件进行过滤。

代码示例:

func main() {rootPath := "./docs"filePaths, err := filepath.Glob(filepath.Join(rootPath, "*"))if err != nil {fmt.Println(err)}for _, filePath := range filePaths {fmt.Println(filePath)}fmt.Println("## 查找 yaml 文件")filePaths, err = filepath.Glob(filepath.Join(rootPath, "*.yaml"))if err != nil {fmt.Println(err)}for _, filePath := range filePaths {fmt.Println(filePath)}
}

输出结果:

docs\admin
docs\application.yaml
docs\content
## 查找 yaml 文件    
docs\application.yaml

相关文章:

GO 的 Web 开发系列(六)—— 遍历路径下的文件

文件 IO 处理是程序的基础功能,WEB 程序中通过文件 IO 实现附件的上传与下载。在 GO 中,有多种方式可以遍历文件目录,获取文件路径,本文从使用层面上论述这些函数。 预先准备一个包含子目录的目录,用于遍历测试&#…...

Flutter 处理异步操作并根据异步操作状态动态构建界面的方法FutureBuilder

概述 当界面的内容需要依靠网络请求的数据,就需要处理苦恼的,状态是空,非空的逻辑了,不然页面构建可能会报错,而FutureBuilder提供了一个非常好的解决方法,直接看代码 代码 异步操作函数 即网络请求函数…...

Git教程-Git的基本使用

Git是一个强大的分布式版本控制系统,它不仅用于跟踪代码的变化,还能够协调多个开发者之间的工作。在软件开发过程中,Git被广泛应用于协作开发、版本管理和代码追踪等方面。以下是一个详细的Git教程,我们将深入探讨Git的基本概念和…...

Java解决长度为K子的数组中的的最大和

Java解决长度为K子的数组中的的最大和 01 题目 给你一个整数数组 nums 和一个整数 k 。请你从 nums 中满足下述条件的全部子数组中找出最大子数组和: 子数组的长度是 k,且子数组中的所有元素 各不相同 。 返回满足题面要求的最大子数组和。如果不存在子…...

【手机端测试】adb基础命令

一、什么是adb adb(Android Debug Bridge)是android sdk的一个工具 adb是用来连接安卓手机和PC端的桥梁,要有adb作为二者之间的维系,才能让用户在电脑上对手机进行全面的操作。 Android的初衷是用adb这样的一个工具来协助开发人…...

【数据结构】深入探讨二叉树的遍历和分治思想(一)

🚩纸上得来终觉浅, 绝知此事要躬行。 🌟主页:June-Frost 🚀专栏:数据结构 🔥该文章主要讲述二叉树的递归结构及分治算法的思想。 目录: 🌍前言:🌍…...

jQuery AJAX get() 和 post() 方法—— W3school 详解 简单易懂(二十四)

jQuery get() 和 post() 方法用于通过 HTTP GET 或 POST 请求从服务器请求数据。 HTTP 请求:GET vs. POST 两种在客户端和服务器端进行请求-响应的常用方法是:GET 和 POST。 GET - 从指定的资源请求数据POST - 向指定的资源提交要处理的数据 GET 基本…...

Linux中如何进行LVM逻辑卷扩容?

#注意:如果lv所在的vg有空间直接扩容就ok了! 1.创建pv pvcreate /dev/sdb 执行以上命令得到以下内容: Physical volume "/dev/sdb" successfully created. 2.直接vgextend扩容 vgextend vg1 /dev/sdb #卷组名字,将…...

现代企业架构框架——应用架构

现代企业架构框架——应用架构。 现代企业架构中的应用架构是指企业在构建和维护应用系统时所采用的一种架构框架。应用架构旨在实现应用系统的可扩展性、灵活性、可维护性和可重用性,以满足企业在数字化时代对应用系统的快速交付和持续创新的需求。下面将详细介绍应用架构的…...

期货开户保证金保障市场正常运转

期货保证金是什么?在期货市场上,采取保证金交易制度,投资者只需按期货合约的价值,交一定比率少量资金即可参与期货合约买卖交易,这种资金就是期货保证金。期货保证金(以下简称保证金〕按性质与作用的不同。…...

WebGIS----wenpack

学习资料:https://webpack.js.org/concepts/ 简介: Webpack 是一个现代化的 JavaScript 应用程序的模块打包工具。它能够将多个 JavaScript 文件和它们的依赖打包成一个单独的文件,以供在网页中使用。 Webpack 还具有编译和转换其他类型文…...

【Maven】Maven 基础教程(二):Maven 的使用

《Maven 基础教程》系列,包含以下 2 篇文章: Maven 基础教程(一):基础介绍、开发环境配置Maven 基础教程(二):Maven 的使用 😊 如果您觉得这篇文章有用 ✔️ 的话&#…...

mirthConnect忽略HTTPS SSL验证

mirthConnect SSL忽略验证 1、下载https网站证书 点击不安全---->证书无效 2、查看mirth 秘钥库口令 在mirthConnect 的conf目录下面keystore.storepass 3、导入证书到本地 在jdk的bin目录下面执行 keytool -importcert -file "下载的网站证书路径" -keysto…...

libvirt命名空间xmlns:qemu的使用

示例xml <domain type{domain_type} xmlns:qemuhttp://libvirt.org/schemas/domain/qemu/1.0><qemu:commandline><qemu:commandline><qemu:arg value-newarg/><qemu:env nameQEMU_ENV valueVAL/></qemu:commandline></domain>"…...

ywtool check命令及ywtool clean命令

一.ywtool check命令 1.1 ywtool check -I 1.2 ywtool check all 1.3 ywtool check io 1.4 ywtool check elk 1.5 ywtool check php 1.6 ywtool check mysql 1.7 ywtool check nginx 1.8 ywtool check system 1.9 ywtool check docker_nbip [容器名称] 1.10 ywtool check 1.10…...

java009 - Java面向对象基础

1、类和对象 1.1 什么是对象 万物皆对象&#xff0c;客观存在的事物皆为对象。 1.2 什么是面向对象 1.3 什么是类 类是对现实生活中一类具有共同属性和行为的事物抽象。 特点&#xff1a; 类是对象的数据类型类是具有相同属性和行为的一组对象的集合 1.4 什么是对象的属…...

MWC 2024 | 广和通携手意法半导体发布智慧家居解决方案

世界移动通信大会2024期间&#xff0c;广和通携手横跨多重应用领域、全球排名前列的半导体公司意法半导体&#xff08;STMicroelectronics&#xff0c;以下简称ST&#xff1b;纽约证券交易所代码&#xff1a;STM&#xff09;发布支持Matter协议的智慧家居解决方案。该方案在广和…...

threejs 大场景下,对小模型进行贴图处理

接上篇小模型的删除☞threeJS 大模型中对小模型进行删除-CSDN博客 针对已有模型&#xff0c;根据数据状态进行贴图处理&#xff0c;例如&#xff1a;机房内电脑告警状态、电脑开关机状态下的不同状态贴图等 示例模型还是以丛林小屋为例&#xff1a;针对该模型中的树干进行贴图…...

云畅科技携手飞腾打造智慧园区信创低代码综合解决方案

01 方案概述 随着国家对信创产业的日益重视与大力支持&#xff0c;信创行业的产业化进程正在不断加快。智慧园区&#xff0c;作为信创产业蓬勃发展的核心载体与战略平台&#xff0c;正日益凸显其重要性。与此同时&#xff0c;在政策引导和市场需求的双重驱动下&#xff0c;智慧…...

Dell R730 2U服务器实践1:开机管理

新入手一台Dell R730 2U服务器&#xff0c;用来做FreeBSD下的编译工作和Ubuntu下简单的AI学习和调试。 服务器配置&#xff1a; CPU&#xff1a;E5 2680V4 2 14核心 内存&#xff1a;DDR4 ECC 16G2 2133 MHz 网卡&#xff1a;双千双万 Intel(R) 2P X540/2P I350 rNDC 硬盘…...

某宝登录密码加密逆向实战——从password2到st码的完整流程解析

1. 淘宝登录加密机制概述 淘宝作为国内最大的电商平台&#xff0c;其登录系统采用了多重安全防护措施。其中password2参数是整个登录流程中最关键的加密环节&#xff0c;它通过RSA算法对用户明文密码进行非对称加密。这种设计能有效防止密码在传输过程中被截获&#xff0c;即使…...

Topit:让Mac窗口置顶变得简单高效,提升多任务处理体验

Topit&#xff1a;让Mac窗口置顶变得简单高效&#xff0c;提升多任务处理体验 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 你是否经常在Mac上工作时被窗口遮…...

SpringBoot项目集成AspectJ:从依赖配置到实战问题排查

1. 为什么选择AspectJ与SpringBoot集成 在Java开发领域&#xff0c;AOP&#xff08;面向切面编程&#xff09;是解决横切关注点的利器。Spring框架自带的AOP功能已经很强大了&#xff0c;但为什么我们还需要引入AspectJ呢&#xff1f;这就像你已经有了一把瑞士军刀&#xff0c;…...

STM32F407实战避坑指南(一)

1. GPIO配置中的那些"坑" 第一次用STM32F407点灯的时候&#xff0c;我信心满满地照着手册写好了GPIO配置代码&#xff0c;结果灯死活不亮。后来才发现&#xff0c;原来GPIO的时钟使能位写错了位置。这种低级错误在新手阶段特别常见&#xff0c;今天就和大家分享几个G…...

生成式AI ROI迟迟不显?SITS2026实测验证的4个可量化增效杠杆与21天见效路径图

第一章&#xff1a;SITS2026总结&#xff1a;生成式AI应用的落地之道 2026奇点智能技术大会(https://ml-summit.org) 在SITS2026大会上&#xff0c;生成式AI从模型能力展示全面转向工程化落地验证。与会企业集中展示了在金融风控、生物医药研发、工业质检等高价值场景中可审计…...

魔兽争霸III终极优化指南:用Warcraft Helper解决Windows兼容性问题

魔兽争霸III终极优化指南&#xff1a;用Warcraft Helper解决Windows兼容性问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸III在Wi…...

暗黑3终极自动化指南:D3KeyHelper图形化宏工具完整配置教程

暗黑3终极自动化指南&#xff1a;D3KeyHelper图形化宏工具完整配置教程 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 暗黑破坏神3作为一款需要频繁…...

FRED应用:LED手电筒模拟

对于大多数应用&#xff0c;发光二极管&#xff0c;或者LED&#xff0c;近几年已经超越了白炽灯光源。LED的优势包括体积小巧、发光效率高和使用寿命长。LED也有光学工程师必须处理的不良特性&#xff0c;比如混色和准直的需要。在这个例子中&#xff0c;我们来看一个LED手电筒…...

从Urbannav真值话题到NavSatFix:手把手教你转换GPS数据格式用于ROS定位评估

从Urbannav真值到NavSatFix&#xff1a;ROS定位评估中的GPS数据格式转换实战 在自动驾驶和机器人定位领域&#xff0c;数据格式的统一性常常成为算法评估中的"最后一公里"难题。当我们使用Urbannav这类专业数据集进行多传感器融合定位算法的精度评估时&#xff0c;经…...

如何监控AWR数据收集Job_DBA_SCHEDULER_JOBS中的BSLN_MAINTAIN_STATS

BSLN_MAINTAIN_STATS状态需查DBA_SCHEDULER_JOBS中含%BSLN%MAINTAIN%STATS%的作业&#xff0c;若无结果则可能被禁用或功能未启用&#xff1b;还需确认维护窗口、AWR快照、statistics_level参数及磁盘空间是否正常。查 Job_DBASCHEDULER_JOBS 里 BSLN_MAINTAIN_STATS 的状态这个…...