go 断言、文件操作

本文详细介绍了Go语言中的断言方法,包括如何判断变量类型并转换,以及如何进行类型切换。同时,文章深入讲解了文件操作,如打开、关闭、读取和写入文件的实现,以及文件复制的示例代码。通过示例,读者可以清晰地理解Go语言处理文件的流程和方法。
摘要由CSDN通过智能技术生成


断言

  • 可以判断变量的类型,并转换成T指定的类型:value, isTrue = element.(T), value 是变量的值,isTrue 是一个bool 类型,element 是interface 变量,T是断言的类型;
  • Type-switch:Type-switch 是go语言中一种特殊的 switch 语句,它比较的是类型,而不是具体的值。它判断某个接口变量的类型,然后根据具体的类型再做相应处理,语法:
func typeSwitch(s Say){
   
    switch s.(type){
    // type 是一个go的关键字,type-switch 的固定写法
    case Chinese:
        ch := s.(Chinese)
        ch.doSmt()
    case American:
        fmt.Println("什么玩意,不认识...")
    }
}

func main() {
   
c := Chinese{
   }
a := American{
   }
fmt.Println("\n==>> type-switch:")
typeSwitch(c)
typeSwitch(a)
}

文件操作

打开、关闭文件

  • 打开:

    • func Open: 传入一个文件路径(字符串),返回文件的指针和是否打开成功。
      func Open(name string) (file *File, err error)
    • Open打开一个文件用于读取。如果操作成功,返回的文件对象的方法可用于读取数据;对应的文件描述符具有O_RDONLY模式。如果出错,错误底层类型是*PathError
  • 关闭:

  • func (*File) Close : 传入文件的指针;使文件不能用于读写,返回可能出现的错误;

  • func (f *File) Close() error

  • Close关闭文件f,使文件不能用于读写。它返回可能出现的错误。

读取文件

  • 读取文件内容并显示再终端;
  • 文件不大: 使用 ioutil 一次将整个文件读取到内存中(iotuil.ReadFile);
    • func ReadFile(filename string) ([]byte, error): ReadFile 从filename指定的文件中读取数据并返回文件的内容。成功的调用返回的err为nil而非EOF。因为本函数定义为读取整个文件,它不会将读取返回的EOF视为应报告的错误。
    • ReadFile 返回的字节数组可以使用 string() 包装,以显示文本内容;
    • ReadFile 不需要进行 open/close 操作,文件的打开/关闭被封装在函数内部了;
  • 文件较大时:需要使用带缓冲区读取的方式;
    • 使用os.Open, file.Close 配合 bufio.NewReader(), reader.ReadString 函数
    • bufio 包下:func (b *Reader) ReadString(delim byte) (line string, err error)
    • ReadString读取直到第一次遇到delim字节,返回一个包含已读取的数据和delim字节的字符串。如果ReadString方法在读取到delim之前遇到了错误,它会返回在错误之前读取的数据以及该错误(一般是io.EOF)。当且仅当ReadString方法返回的切片不以delim结尾时,会返回一个非nil的错误。

写入文件

  • 使用 OpenFile打开;使用 bufio.NewWriter(*file) + writer.WriteString() + writer.Flush()写入
  • func OpenFile: 3个参数:要打开的文件路径;文件打开模式(使用| 进行组合);权限控制(linux/unix 系统下才生效;windows 下设置无效,为了可移植性最好写上)os.FileMode(0644).String()
  • func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
  • OpenFile是一个更一般性的文件打开函数,大多数调用者都应用Open或Create代替本函数。它会使用指定的选项(如O_RDONLY等)、指定的模式(如0666等)打开指定名称的文件。如果操作成功,返回的文件对象可用于I/O。如果出错,错误底层类型是*PathError。
  • 第二个参数:
Constants
const (
    O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件
    O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件
    O_RDWR   int = syscall.O_RDWR   // 读写模式打开文件
    O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部
    O_CREATE int = syscall.O_CREAT  // 如果不存在将创建一个新文件
    O_EXCL   int = syscall.O_EXCL   // 和O_CREATE配合使用,文件必须不存在
    O_SYNC   int = syscall.O_SYNC   // 打开文件用于同步I/O
    O_TRUNC  int = syscall.O_TRUNC  // 如果可能,打开时清空文件
)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值