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

GO系列-IO 文件操作

os io

判断文件是否存在

func fileExist(filePath string) (bool, error) {_, err := os.Stat(filePath)if err == nil {return true, nil}if os.IsNotExist(err) {return false, nil}return false, &CheckFileExistError{filePath}
}

读取文件内容

func readFileContext(file *os.File) (string, error) {if file == nil {return "", nil}var buf [1024]bytevar content []bytefor {n, err := file.Read(buf[:])if err == io.EOF {//结尾break} else if err != nil {log.Println("Read file error", file.Name())return "", err}content = append(content, buf[:n]...)}return string(content), nil
}

创建文件&写入文件内容

// 如果不存在 则创建
if !exist {log.Println("create file:", filePath)newFile, err := os.Create(filePath)if err != nil {log.Panicln(err.Error())}// 写入文件newFile.WriteString("Hello word !!!\n")newFile.Write([]byte("happy every day\n"))newFile.Close()
}

打开文件

// 打开这个文件
file1, err := os.Open(filePath)
if err != nil {log.Panicln(err.Error())
}

关闭和删除文件

// 删除前关闭文件,否则报错
file1.Close()// 删除文件
stat1, _ := file1.Stat()
if stat1 != nil {log.Println("file is not closed")
}
err = os.Remove(filePath)
if err != nil {log.Println("remove file error", filePath, err.Error())
}
log.Println("remove file success", filePath)

copy文件

func copyFile(filePath1 string, filePath2 string) error {exist, err := fileExist(filePath1)if err != nil {return err}if !exist {log.Println("file1 must exist ")return nil}file1, err := os.Open(filePath1)if err != nil {log.Println("open file1 error")return err}defer file1.Close()// 如果存在则删除exist, err = fileExist(filePath2)if err != nil {return err}if exist {os.Remove(filePath2)}file2, err := os.Create(filePath2)if err != nil {log.Println("create file2 error")return err}defer file2.Close()var buffer [1024]bytefor {n, err := file1.Read(buffer[:])if err == io.EOF {log.Println("copy complete")break}if err != nil {log.Println("copy error")return err}file2.Write(buffer[:n])}return nil
}

综合示例

package mainimport ("io""log""os"
)type CheckFileExistError struct {FilePath string
}func (err CheckFileExistError) Error() string {return "Check File[" + err.FilePath + "] Exist Error"
}func fileExist(filePath string) (bool, error) {_, err := os.Stat(filePath)if err == nil {return true, nil}if os.IsNotExist(err) {return false, nil}return false, &CheckFileExistError{filePath}
}func readFileContext(file *os.File) (string, error) {if file == nil {return "", nil}var buf [1024]bytevar content []bytefor {n, err := file.Read(buf[:])if err == io.EOF {//结尾break} else if err != nil {log.Println("Read file error", file.Name())return "", err}content = append(content, buf[:n]...)}return string(content), nil
}func copyFile(filePath1 string, filePath2 string) error {exist, err := fileExist(filePath1)if err != nil {return err}if !exist {log.Println("file1 must exist ")return nil}file1, err := os.Open(filePath1)if err != nil {log.Println("open file1 error")return err}defer file1.Close()// 如果存在则删除exist, err = fileExist(filePath2)if err != nil {return err}if exist {os.Remove(filePath2)}file2, err := os.Create(filePath2)if err != nil {log.Println("create file2 error")return err}defer file2.Close()var buffer [1024]bytefor {n, err := file1.Read(buffer[:])if err == io.EOF {log.Println("copy complete")break}if err != nil {log.Println("copy error")return err}file2.Write(buffer[:n])}return nil
}func main() {log.Println("main ...")filePath := "./test.txt"filePath2 := "./test2.txt"exist, err := fileExist(filePath)log.Println("file ", filePath, "exist:", exist)if err != nil {log.Println(err.Error())}// 如果不存在 则创建if !exist {log.Println("create file:", filePath)newFile, err := os.Create(filePath)if err != nil {log.Panicln(err.Error())}// 写入文件newFile.WriteString("Hello word !!!\n")newFile.Write([]byte("happy every day\n"))newFile.Close()}// 打开这个文件file1, err := os.Open(filePath)if err != nil {log.Panicln(err.Error())}// 读取文件原始内容context, err := readFileContext(file1)if err != nil {log.Panicln(err.Error())}log.Println("context:", context)// 删除前关闭文件,否则报错file1.Close()// copy文件copyFile(filePath, filePath2)// 删除文件stat1, _ := file1.Stat()if stat1 != nil {log.Println("file is not closed")}err = os.Remove(filePath)if err != nil {log.Println("remove file error", filePath, err.Error())}log.Println("remove file success", filePath)log.Println("success ..")
}

bufio

bufio包实现了带缓冲区的读写,是对文件读写的封装

bufio缓冲写数据

模式       含义

os.O_WRONLY     只写

os.O_CREATE      创建文件

os.O_RDONLY      只读

os.O_RDWR   读写

os.O_TRUNC 清空

os.O_APPEND      追加

package mainimport ("bufio""io""log""os"
)// 写文件
func write(filePath string) {// 参数2:打开模式,所有模式d都在上面// 参数3是权限控制// w写 r读 x执行   w  2   r  4   x  1file, err := os.OpenFile(filePath, os.O_CREATE|os.O_WRONLY, 0666)if err != nil {return}defer file.Close()// 获取writer对象writer := bufio.NewWriter(file)for i := 0; i < 10; i++ {writer.WriteString("hello\n")}// 刷新缓冲区,强制写出writer.Flush()
}// 读取文件
func read(filePath string) string {file, err := os.Open(filePath)if err != nil {return ""}defer file.Close()var content []bytereader := bufio.NewReader(file)for {line, _, err := reader.ReadLine()if err == io.EOF {break}if err != nil {return ""}content = append(content, []byte(string(line)+"\n")...)}return string(content)
}func main() {log.Println("main ...")filePath := "./test1.txt"write(filePath)content := read(filePath)log.Println(content)log.Println("success ..")
}

ioutil

package mainimport ("io/ioutil""log"
)func main() {log.Println("main ...")filePath := "./test1.txt"// 写文件err := ioutil.WriteFile(filePath, []byte("hello word"), 0666)if err != nil {log.Println(err)return}// 读取文件content, err := ioutil.ReadFile(filePath)if err != nil {log.Println(err)return}log.Println(string(content))log.Println("success ..")
}

控制台输入输出

终端其实是一个文件,相关实例如下:

os.Stdin:标准输入的文件实例,类型为*File

os.Stdout:标准输出的文件实例,类型为*File

os.Stderr:标准错误输出的文件实例,类型为*File

以文件的方式操作终端:

package mainimport ("log""os"
)func main() {log.Println("main ...")var buf [16]byte// 从控制台读取一行数据os.Stdin.Read(buf[:])log.Println("read context:", string(buf[:]))// 写入到控制台os.Stdout.WriteString("hello word\n")log.Println("success ..")
}

相关文章:

GO系列-IO 文件操作

os io 判断文件是否存在 func fileExist(filePath string) (bool, error) {_, err : os.Stat(filePath)if err nil {return true, nil}if os.IsNotExist(err) {return false, nil}return false, &CheckFileExistError{filePath} } 读取文件内容 func readFileContext(…...

【前端】使用WebStorm创建第一个项目

文章目录 前言一、步骤1、启动2、创建项目3、配置Node.js4、运行项目 二、Node.js介绍 前言 根据前面文章中记录的步骤&#xff0c;已经安装好了WebStorm开发软件&#xff0c;接下来我们就用这个IDE开发软件创建第一个项目。 一、步骤 1、启动 启动软件。 2、创建项目 新建…...

自定义类型:结构体,枚举,联合

结构体 结构体的基本声明 基础知识&#xff1a;结构是一些值的集合&#xff0c;这些值称为成员变量&#xff0c;结构的每个成员可以是不同类型的变量。 //学生 struct Stu {//学生的相关信息char name[20];int age; }s1,s2; //s1,s2是直接创建的结构体变量&#xff08;全局变…...

柠檬水找零(力扣860)

这道题的贪心很简单&#xff0c;就是体现在对于20元的找零上。根据题意&#xff0c;20元有两种找零方式&#xff1a;1.找一张5元和一张10元&#xff1b;2.找3张5元。但是5元比较万能&#xff0c;因为无论是10还是20都需要用5元来找零&#xff0c;所以我们优先考虑第一种找零方式…...

sprintf和sscanf的用法和区别

sprintf和sscanf是C语言中常用的字符串处理函数&#xff0c;它们各自有不同的用途和用法。 1、sprintf的用法 sprintf函数主要用于将数据格式化为字符串并存储在指定的缓冲区中。其函数原型为&#xff1a; int sprintf(char *str, const char *format, ...); str&#xff1a…...

deepseek自动化代码生成

使用流程 效果第一步&#xff1a;注册生成各种大模型的API第二步&#xff1a;注册成功后生成API第三步&#xff1a;下载vscode在vscode中下载agent&#xff0c;这里推荐使用cline 第四步&#xff1a;安装完成后&#xff0c;设置模型信息第一步选择API provider&#xff1a; Ope…...

静态时序分析:时钟组间的逻辑独立、物理独立和异步的区别

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html 当设计中存在多个时钟&#xff08;同步或异步&#xff09;时&#xff0c;该如何使用SDC命令约束设计呢&#xff1f;本文就将对此进行讨论。 逻辑独立 例1 多个时钟完全逻辑独立 图1 逻辑…...

深入HBase——数据结构与算法

引入 通过前面的文章&#xff0c;我们对HBase已经有了基本认识&#xff0c;下面我们从HBase最核心的算法和数据结构进一步深入HBase。 HBase的一个列簇&#xff08;Column Family&#xff09;本质上就是一棵LSM树&#xff08;Log-Structured Merge-Tree&#xff09;​。LSM树…...

学习Linux准备2

使用win10系统带的wsl配置ubuntu系统&#xff0c;通过wsl功能我们可以更简单更轻松的获得Linux系统环境。 首先开启Windows自带的wsl功能 打开控制面板&#xff0c;选中启用或关闭Windows功能 这里我们点击进入 将上图红√点击上&#xff0c;点击确定&#xff0c;然后重新启动…...

MATLAB图像处理:图像分割方法

图像分割将图像划分为具有特定意义的子区域&#xff0c;是目标检测、医学影像分析、自动驾驶等领域的核心预处理步骤。本文讲解阈值分割、边缘检测、区域生长、聚类分割、基于图的方法等经典与前沿技术&#xff0c;提供MATLAB代码实现。 目录 1. 图像分割基础 2. 经典分割方…...

什么是“可迭代”

在 Python 中&#xff0c;“可迭代”&#xff08;Iterable&#xff09;是一个非常重要的概念&#xff0c;它指的是任何可以被逐个访问其元素的对象。换句话说&#xff0c;如果一个对象支持迭代操作&#xff08;比如可以通过 for 循环逐个访问其元素&#xff09;&#xff0c;那么…...

使用Ubuntu搭建Java部署环境

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f439;今日诗词:小舟从此逝&#xff0c;江海寄余生&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&#x1f64f; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小…...

Linux 文件的三个时间:Access、Modify 和 Change

目录 一、文件的三个时间戳 1. 访问时间&#xff08;Access Time&#xff09; 2. 修改时间&#xff08;Modify Time&#xff09; 3. 更改时间&#xff08;Change Time&#xff09; 二、如何查看文件的三个时间戳 三、文件时间戳的变化规则 1. 修改文件内容 2. 修改文件…...

移植live555 上的 rtsp

一、V4L2视频采集模块&#xff08;完整示例&#xff09; #include <linux/videodev2.h> #include <sys/ioctl.h> #include <fcntl.h>// 初始化V4L2摄像头 int init_v4l2_camera(const char* dev_path, int width, int height) {int fd open(dev_path, O_RD…...

基于SpringBoot的“宠物救助及领养平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“宠物救助及领养平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统整体功能图 系统首页界面 系统注册页面…...

Gemini 2.0助力科学突破,AI联合科学家系统登场

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

electron提升软件运行权限,以管理员权限运行

大家有任何想法&#xff0c;都可以联系博主沟通。 本系列为实战文章&#xff0c;最终实现的桌面工具软件&#xff0c;获取方式&#xff1a;百度网盘地址&#xff1a;https://pan.baidu.com/s/1yrl0jYpti7QCn8CHBRT2lw?pwd1234 正文开始 前言一、提升electron运行权限的三种方…...

Docker 容器调试技巧

在开发和运维过程中&#xff0c;调试 Docker 容器中的应用或服务是一个常见且重要的任务。由于容器是相互隔离的&#xff0c;容器内部的日志和错误信息可能不像传统的服务器那样直观&#xff0c;因此掌握 Docker 容器调试技巧对于快速定位和解决问题至关重要。 本文将介绍一些…...

TSMaster【第七篇:千机百变——面板设计艺术】

武侠场景导入&#xff1a;唐门暗器阁的启示 江湖传言&#xff0c;唐门暗器之所以独步天下&#xff0c;全凭其「千机匣」中七十二种机关变化。TSMaster面板设计恰似打造暗器机关——控件如同飞镖、机簧、毒针&#xff0c;组合方式不同则威力迥异。昔日某新势力车型因仪表盘刷新…...

ctfshow——robots后台泄露

题目提示&#xff1a;总有人把后台地址写入robots&#xff0c;帮黑阔大佬们引路 题目如上图所示 根据提示&#xff0c;我们可以在URL上查看是否存在robots文件 打开后发现其中的内容如上图所示&#xff0c;存在一个flagishere.txt文件&#xff0c;我们可以继续在URL上进行操作…...

普通人怎样用好Deepseek?

第一章&#xff1a;准备篇&#xff08;30分钟上手&#xff09; DeepSeek 是一款功能强大的数据处理和分析工具&#xff0c;广泛应用于数据挖掘、机器学习、商业智能等领域。 本文将通过图文结合的方式&#xff0c;详细介绍 DeepSeek 的安装、配置、基本使用、高级功能以及实用…...

负载均衡集群( LVS 相关原理与集群构建 )

目录 1、LVS 相关原理 1.1、LVS集群的体系结构以及特点 1.1.1 LVS简介 1.1.2 LVS体系结构 1.1.3 LVS相关术语 1.1.4 LVS工作模式 1.1.5 LVS调度算法 1.2 LVS-DR集群介绍 1.2.1 LVS-DR模式工作原理 1.2.2 LVS-DR模式应用特点 1.2.3 LVS-DR模式ARP抑制 1.3 LVS – NA…...

前端面试-JavaScript 数据类型检测全解

目录 一、基础检测方法 二、方法深度解析 1. typeof 运算符 2. instanceof 运算符 3. 终极检测方案 三、特殊场景检测方案 四、手写实现原理 1. 通用类型检测函数 2. 改进版数组检测&#xff08;兼容旧浏览器&#xff09; 五、常见面试陷阱 六、最佳实践指南 七、扩…...

百度百舸 DeepSeek 一体机发布,支持昆仑芯 P800 单机 8 卡满血版开箱即用

在私有云环境中成功部署 DeepSeek 满血版并实现性能调优&#xff0c;并不是一件容易的事情。选择合适的 GPU 配置、安装相应的环境、成功部署上线业务、加速推理任务加速、支撑多用户并发 …… 完成业务测试&#xff0c;成功融入生产业务中。 为了帮助企业快速实现 DeepSeek 服…...

微软CEO-纳德拉访谈-AGI计划

在与知名科技播客主播 Dwarkesh Patel 的深度访谈中,微软 CEO 萨提亚・纳德拉围绕 AI、量子计算、微软发展等多方面分享深刻见解,下面是针对访谈内容的介绍,其中还是有很多值得我们学习的地方。 1 AI 领域见解 影响力评估:纳德拉直言行业所标榜的 AGI 里程碑是 “无意义的基…...

Web自动化中Selenium下Chrome与Edge的Webdriver常用Options参数

目录 引言 说明 Add_argument() 添加方式 常用参数 Add_experimental_option() 添加方式 常用方法 任务结束后仍然保持浏览器打开 禁用“Chrome 正受到自动测试软件的控制”提示 设置下载路径 禁用弹窗拦截 禁用图片加载 禁用 JavaScript 注意 引言 …...

1.4 嵌入式系统的软件

嵌入式系统的开发流程中&#xff0c;硬件和固件设计完成后&#xff0c;嵌入式软件承担起实现功能、用户交互、系统集成和性能优化等任务&#xff1b;嵌入式系统软件分为设备驱动、操作系统和应用程序三个层面。 因此嵌入式系统软件开发工程师通常分为三类&#xff1a;嵌入式系统…...

深蓝学院自主泊车第3次作业-IPM

目录 1 题目介绍2 求解 1 题目介绍 已知鱼眼相机的参数&#xff0c; image_width&#xff0c;表示图像的宽度image_height&#xff0c;表示图像的高度 ξ \xi ξ&#xff0c;表示鱼眼相机参数 k 1 k_1 k1​、 k 2 k_2 k2​&#xff0c;表示径向相机参数 p 1 p_1 p1​、 p 2 p…...

Confluence 8.5.18 - windows 安装部署详解

本文我们所讲述的是Confluence - 8.5.18 -windows版本版本的详细安装破解步骤,与Confluence - 8.0.0之前的版本不同的是,部分文件名称发生了变化,以前的破解方式已不适用。 1.首先我们先准备安装所需要的文件 atlassian-confluence-8.5.18-x64.exemysql-connector-java-8.0…...

深入解析过滤器模式:数据筛选与处理的高效工具

过滤器模式&#xff1a;数据筛选与处理的高效工具 在软件开发的复杂领域中&#xff0c;数据的筛选与处理是常见的任务。过滤器模式作为一种实用的设计模式&#xff0c;为解决这类问题提供了有效的解决方案。它允许开发者根据不同的标准对一组对象进行过滤操作&#xff0c;从而…...

linux常用基础命令_最新版

常用命令 查看当前目录下个各个文件大小查看当前系统储存使用情况查看当前路径删除当前目录下所有包含".log"的文件linux开机启动jar更改自动配置文件后操作关闭自启动linux静默启动java服务查询端口被占用查看软件版本重启关机开机启动取别名清空当前行创建文件touc…...

曝光铁三角

一、曝光铁三角的关系解析 光圈&#xff08;Aperture&#xff09; 作用&#xff1a;控制光线进入相机的孔径大小&#xff0c;同时影响景深&#xff08;画面清晰范围&#xff09;。 数值规则&#xff1a;光圈值&#xff08;如F/1.8、F/8&#xff09;越小&#xff0c;孔径越大&am…...

reacct hook useState

useState useState 是一个 React Hook&#xff0c;允许函数组件在内部管理状态。 使用方法 let [str,setStr] useState(‘three’) useState接受的参数为初始值&#xff1b;返回一个数组 第一个元素&#xff1a;当前的状态值&#xff1b;第二个元素&#xff1a;一个更新该状…...

政安晨【零基础玩转各类开源AI项目】DeepSeek 多模态大模型Janus-Pro-7B,本地部署!支持图像识别和图像生成

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 目录 下载项目 创建虚拟环境 安装项目依赖 安装 Gradio&#xff08;UI&#xff09; 运…...

计算机毕业设计SpringBoot+Vue.js学生读书笔记共享(源码+LW文档+PPT+讲解+开题报告)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

QEMU源码全解析 —— 内存虚拟化(17)

接前一篇文章:QEMU源码全解析 —— 内存虚拟化(16) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《...

Maven 构建中的安全性与合规性检查

在现代软件开发中&#xff0c;确保应用程序的安全性和合规性至关重要。随着开源软件和第三方依赖的广泛使用&#xff0c;构建过程中对依赖的安全性和合规性检查变得尤为重要。通过 Maven 构建工具&#xff0c;我们可以集成多种安全性和合规性检查机制&#xff0c;帮助开发者检测…...

Deepseek R1 和其他的大模型 共同辅助决策交通出行方案

比一比各家大模型 问题描述一、Deepseek R1通勤方式评估报告&#xff08;一&#xff09;评分模型说明&#xff08;二&#xff09;各选项评分明细&#xff08;三&#xff09;加权总分计算&#xff08;四&#xff09;结论 二、文心一言通勤方式评估&#xff08;一&#xff09;时间…...

HTTPS 通信流程

HTTPS 通信流程时序图&#xff1a; #mermaid-svg-HWoTbFvfih6aYUu6 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-HWoTbFvfih6aYUu6 .error-icon{fill:#552222;}#mermaid-svg-HWoTbFvfih6aYUu6 .error-text{fill:#…...

C++——list模拟实现

目录 前言 一、list的结构 二、默认成员函数 构造函数 析构函数 clear 拷贝构造 赋值重载 swap 三、容量相关 empty size 四、数据访问 front/back 五、普通迭代器 begin/end 六、const迭代器 begin/end 七、插入数据 insert push_back push_front 八、…...

开发指南103-jpa的find**/get**全解

平台使用jpa来访问数据库。在dao层可以通过定义find**/get**函数&#xff0c;通过名字直接绑定数据库字段。find**和get**有一定区别&#xff1a; 1.get**方法查询不到数据抛出异常&#xff0c;find**方法查询不到数据则返回null。 2.get**是延迟加载&#xff0c;在真正访问返…...

初学者如何设置以及使用富文本编辑器[eclipse版]

手把手教你设置富文本编辑器 参考来源&#xff1a;UEditor Docs 初学者按我的步骤来就可以啦 一、设置ueditor编辑器 1.提取文件[文章最底部有链接提取方式] 2.解压文件并放到自己项目中&#xff0c;在WebContent目录下&#xff1a; 3. 修改jar包位置路径 到--> 注意&a…...

Flutter 启动优化

Dart VM在Flutter中的作用是什么&#xff1f;它负责执行Dart代码&#xff0c;无论是JIT还是AOT模式都需要它。在JIT模式下&#xff0c;VM随应用一起运行&#xff0c;而在AOT模式下&#xff0c;代码已经被编译成机器码&#xff0c;VM可能不需要运行时存在&#xff1f;不过实际上…...

Java Idea配置问题

在 cmd 里手动切换&#xff1a; set JAVA_HOMEC:\Program Files\Java\jdk1.8.0_192 set PATH%JAVA_HOME%\bin;%PATH%在Idea的终端查看: java -versionClass com.sun.tools.javac.tree.JCTree$JCImport does not have member field ‘com.sun.tools.javac.tre JDK 版本不匹配 …...

百度搜索,能否将DeepSeek变成“内功”?

最近&#xff0c;所有的云平台和主流APP都在努力接入DeepSeek。其中&#xff0c;搜索类APP与搜索引擎更是“战况激烈”。那么问题来了&#xff0c;接入DeepSeek已经变成了标准配置&#xff0c;到底应该如何做出差异化&#xff1f;接入DeepSeek这件事能不能实现11大于2的效果&am…...

【C++委托与事件】函数指针,回调机制,事件式编程与松耦合的设计模式(上)

前言 上一次发文章已经是在两个月前了hhh&#xff0c;期间也是忙忙碌碌做了不少事情也鸽了不少东西… 本文我们来讲讲博主最近在项目中频繁使用的&#xff0c;也就是广泛运用于C#或者Java的一个常用编程机制&#xff08;思路&#xff09;-----委托和事件。由于C在语言特性上没…...

【Java学习】抽象类与接口

面向对象系列四 一、抽象方法 二、抽象类 三、意义检查 1.抽象方法的意义 2.意义检查 体现 四、接口 1.级别层次 2.接口变量 3.意义 4.成员 成员变量&#xff1a; 成员方法&#xff1a; 一、抽象方法 没有方法体即没有任何实现的方法是抽象方法&#xff0c;只有在…...

体育电竞比分网开发流程

开发一个体育电竞比分网的流程可以分为以下几个主要步骤&#xff1a; 1. 需求分析 目标用户&#xff1a;确定网站的主要用户群体&#xff0c;如体育迷、电竞爱好者等。 功能需求&#xff1a;列出网站需要实现的功能&#xff0c;如实时比分更新、赛事日程、新闻资讯、用户评论…...

vue2和vue3的主要区别

Vue 2 和 Vue 3 之间有几个主要区别&#xff0c;涉及到性能、功能和架构上的改进。以下是一些核心的区别&#xff1a; Composition API&#xff08;组合式 API&#xff09;&#xff1a; Vue 2 使用的是选项式 API&#xff08;Options API&#xff09;&#xff0c;即通过 data, …...

粘贴到Word里的图片显示不全

粘贴到Word里的图片显示不全&#xff0c;可从Word设置、图片本身、软件与系统等方面着手解决&#xff0c;具体方法如下&#xff1a; Word软件设置 经实践发现&#xff0c;图片在word行距的行距出现问题&#xff0c;可以按照如下调整行距进行处理 修改段落行距&#xff1a; 选…...