前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >go :复制文件内容到另一个文件

go :复制文件内容到另一个文件

原创
作者头像
IT工作者
发布于 2022-07-22 14:14:23
发布于 2022-07-22 14:14:23
61000
代码可运行
举报
文章被收录于专栏:程序技术知识程序技术知识
运行总次数:0
代码可运行

本文实验,从一个文件拷贝文件内容到另外一个文件

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main

import (
    "fmt"
    "io"
    "os"
)

func copyFileContents(src, dst string) (err error) {
    in, err := os.Open(src)
    if err != nil {
        return
    }
    defer in.Close()
    out, err := os.Create(dst)
    if err != nil {
        return
    }
    defer func() {
        cerr := out.Close()
        if err == nil {
            err = cer
        }
    }()
    if _, err = io.Copy(out, in); err != nil {
        return
    }
    err = out.Sync()
    return
}

func main() {
    err := copyFileContents("main.go", "test.test")
    if err != nil {
        panic(err)
    }

    fmt.Println("copy success!!!")
}

程序中,将 main.go 的文件内容拷贝到了 test.test 里面

运行代码之后可以查看 test.test内容

总结:

需要注意的是 sync函数

err = out.Sync()

复制完成之后需要判断一下文件状态,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Sync commits the current contents of the file to stable storage.
// Typically, this means flushing the file system's in-memory copy
// of recently written data to disk.
func (f *File) Sync() error {
    if err := f.checkValid("sync"); err != nil {
        return er
    }
    if e := f.pfd.Fsync(); e != nil {
        return f.wrapErr("sync", e)
    }
    return nil
}

sync函数中会调用Fsync()将数据落盘

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func (fd *FD) Fsync() error {
    if err := fd.incref(); err != nil {
        return er
    }
    defer fd.decref()

    _, e1 := fcntl(fd.Sysfd, syscall.F_FULLFSYNC, 0)
    return e1
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
为什么要避免在 Go 中使用 ioutil.ReadAll?
ioutil.ReadAll 主要的作用是从一个 io.Reader 中读取所有数据,直到结尾。
AlwaysBeta
2022/01/06
2.8K0
我为什么放弃Go语言?
👉腾小云导读 你在什么时候会产生“想要放弃用 Go 语言”的念头?也许是在用 Go 开发过程中,接连不断踩坑的时候。本文作者提炼和总结《100 Go Mistakes and How to Avoid Them》里的精华内容,并结合自身的工作经验,盘点了 Go 的常见典型错误,撰写了这篇超全避坑指南。让我们跟随文章,一起重拾用 Go 的信心~ 👉目录 1 注意 shadow 变量 2 慎用 init 函数 3 embed types 优缺点 4 Functional Options Pattern 传递参数
腾讯云开发者
2023/06/06
1.8K0
我为什么放弃Go语言?
Go基础--终端操作和文件操作
终端操作 操作终端相关的文件句柄常量 os.Stdin:标准输入 os.Stdout:标准输出 os.Stderr:标准错误输出 关于终端操作的代码例子: package main import "fmt" var ( firstName,lastName,s string i int f float32 input = "56.12/5212/Go" format = "%f/%d/%s" ) func main() { fmt.Println("pl
coders
2018/03/30
7440
Go基本库阅读:io库
阅读标准库是我大一学haskell时养成的习惯,通过阅读标准库能够更好地掌握语言设计者认为这个语言应该如何使用,从而少走一些弯路。
千灵域
2022/06/17
1.1K0
Go: 神奇的defer简介与实践
defer是go中一种延迟调用机制,defer后面的函数只有在当前函数执行完毕后才能执行,通常用于释放资源。defer遵循先进后出的原则,类似于栈的结构。go 的 defer 语句是用来延迟执行函数的,而且延迟发生在调用函数 return之后,比如
Freedom123
2024/03/29
1280
Go语言defer分析
defer语句是专门在函数结束以后做一些清理工作的。我们先举一个例子来更好的理解,现在有一个函数,它的作用是把一个文件内容拷贝到另一个文件。
平也
2020/04/03
4250
Go语言defer分析
[译]Go语言常用文件操作汇总
Go官方提供的文件操作标准库分散在os、ioutil等多个包中,里面有非常多的方法涵盖了文件操作的所有场景,不过因为我平时开发过程中需要直接操作文件的场景其实并不多,在加上Go标准库的文档太难搜索,每次遇到要使用文件函数时都是直接Google查对应的函数。偶然查到国外一个人在2015年写的博客,他用常用的文件函数汇总了30个文件操作场景,包括四大类:基本操作、读写操作、文件压缩、其他操作。每一个文件操作都给了代码示例。写的非常好,强烈推荐你阅读一下,浏览一下它的目录,然后放到收藏夹里吃灰,万一哪天用到了还能拿来参考一下。
KevinYan
2020/10/10
1.2K0
Go进阶笔记关于Error
其实很多时候是使用的姿势不对,或者说,对于error的用法没有完全理解,这里整理一下关于Go中的error 。
后场技术
2020/12/29
5020
Go语言入门——进阶语法篇(四)
Go语言没有类似Java或Python那种try...catch...机制处理异常,Go的哲学是与众不同的,Go的设计者认为主流的异常处理机制是一种被过度滥用的技巧,而且存在很大的潜在危害,Go的异常处理(或者说是错误处理)是一种非常简单直观的方式。通常的,我们在写Java、Python之类的代码时,遇到可能存在的异常,直接用try括起来,使用catch捕获,然后就万事大吉了,当系统长时间的运行时,大大增加了不稳定性,所积累的问题可能在某一刻爆发。而Go者使用一种称为"恐慌的"机制,在有必要时,直接让系统宕机,让问题发生时立刻暴露出来,不必累积。很难说哪种设计更好,但Go语言确实简化了代码。
arcticfox
2019/09/03
5370
详解Go语言I/O多路复用netpoller模型
从 Go 源码目录结构和对应代码文件了解到 Go 在不同平台下的网络 I/O 模式的有不同实现。比如,在 Linux 系统下基于 epoll,freeBSD 系统下基于 kqueue,以及 Windows 系统下基于 iocp。
luozhiyun
2021/02/16
2.4K0
Go语言中三种不同md5计算方式的性能比较
前言 本文主要介绍的是三种不同的 md5 计算方式,其实区别是读文件的不同,也就是磁盘 I/O, 所以也可以举一反三用在网络 I/O 上。下面来一起看看吧。 ReadFile 先看第一种, 简单粗暴:
李海彬
2018/03/26
4.1K0
详解golang net之netpoll
golang的底层使用epoll来实现IO复用。netPoll通过pollDesc结构体将文件描述符与底层进行了绑定。netpoll实现了用户层面的与底层网络IO相关的goroutine的阻塞/非阻塞管理。
charlieroro
2020/03/23
4.3K0
Go标准库之读写文件(File)
Go标准库之读写文件(File) 创建一个空文件 package main import ( "log" "os" ) func main() { file, err := os.Create("empty.txt") if err != nil { log.Fatal("create file err", err) } log.Println(file) file.Close() } 获取文件的信息 package main i
程序员同行者
2019/02/22
5160
Golang 高效实践之defer、panic、recover实践
我们知道Golang处理异常是用error返回的方式,然后调用方根据error的值走不同的处理逻辑。但是,如果程序触发其他的严重异常,比如说数组越界,程序就要直接崩溃。Golang有没有一种异常捕获和恢复机制呢?这个就是本文要讲的panic和recover。其中recover要配合defer使用才能发挥出效果。
用户2937493
2019/08/29
9870
Golang 高效实践之defer、panic、recover实践
golang操作文件
用习惯了python, 用go的文件读写,觉得还是有点别扭。 先总结下来,后面用的时候,可以查看。
赵云龙龙
2022/03/29
5210
golang操作文件
使用Golang操作文件的那些事儿
文件:计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件。例如咱们常见的文件后缀名.exe,.txt,'.word'…等等
PayneWu
2020/12/18
8940
使用Golang操作文件的那些事儿
(三十六)golang--文件的基本操作
2.读取文件中的内容,并显示给终端(带缓冲区的方式),使用os.Open(),file.Close(),bufio.NewReader(),reader.ReadString()
西西嘛呦
2020/08/26
3210
Rust vs Go:常用语法对比(十二)
Found "dewey" at position 1 in ["huey" "dewey" "louie"]
fliter
2023/09/05
2500
Rust vs Go:常用语法对比(十二)
golang错误处理笔记
Go语言中,错误被认为是一种可以预期的结果;而异常则是一种非预期的结果,发生异常可能表示程序中存在 BUG 或发生了其它不可控的问题。
lelezc
2022/12/01
5730
Go 语言简介(上)— 语法
Hello World package main //声明本文件的package名 import "fmt" //import语言的fmt库——用于输出 func main() { fmt.Println("hello world") } 运行 你可以有两种运行方式, $go run hello.go hello world $go build hello.go $ls hello hello.go $./hello hello world 自己的package 你可以使用GOPATH环境变
李海彬
2018/03/22
1.2K0
相关推荐
为什么要避免在 Go 中使用 ioutil.ReadAll?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验