一. 输入流

  • 输入流就是把程序中数据写出到外部资源
  • Go语言标准库中输出流是Writer接口
    1. // Writer is the interface that wraps the basic Write method.
    2. //
    3. // Write writes len(p) bytes from p to the underlying data stream.
    4. // It returns the number of bytes written from p (0 <= n <= len(p))
    5. // and any error encountered that caused the write to stop early.
    6. // Write must return a non-nil error if it returns n < len(p).
    7. // Write must not modify the slice data, even temporarily.
    8. //
    9. // Implementations must not retain p.
    10. type Writer interface {
    11. Write(p []byte) (n int, err error)
    12. }

二.代码操作

  • 注意:输入流时不要使用os.Open()因为这种方式获取的文件是只读的

    1. fp := "D:/go.txt"
    2. /*
    3. 第三个参数表示文件权限
    4. 第 1 位在权限中总是为 0
    5. 第 2 位为 0 表示文件不可以被读, 为 1 表示可以被读
    6. 第 3 位为 0 表示文件不可以被写, 为 1 表示可以被写
    7. 第 4 位为 0 表示文件不可以被执行, 为 1 表示可以被执行
    8. 整理如下:
    9. 0(0000): 不可读写,不能被执行
    10. 1(0001): 不可读写,能被执行
    11. 2(0010): 可写不可读,不能被执行
    12. 3(0011): 可写不可读,能被执行
    13. 4(0100): 可读不可写,不能被执行
    14. 5(0101): 可读不可写,能被执行
    15. 6(0110): 可读写,不能执行
    16. 7(0111): 可读写,可执行
    17. 0666:
    18. 第一个 0 表示这个数是 八进制
    19. 第一个 6 表示文件拥有者有读写权限,但没有执行权限
    20. 第二个 6 表示文件拥有者同组用户有读写权限,但没有执行权限
    21. 第三个 6 表示其它用户有读写权限,但没有执行权限
    22. */
    23. //第二个参数表示文件内容追加
    24. //第三个参数表示创建文件时文件权限
    25. f, err := os.OpenFile(fp, os.O_APPEND, 0660)
    26. defer f.Close()
    27. if err != nil {
    28. fmt.Println("文件不存在,创建文件")
    29. f, _ = os.Create(fp)
    30. }
    31. /*
    32. 内容中识别特殊字符
    33. \r\n 换行
    34. \t 缩进
    35. */
    36. /*
    37. 使用文件对象重写的Writer接口,参数是[]byte
    38. */
    39. f.Write([]byte("使用Writer接口写数据\r\n"))
    40. /*
    41. 使用stringWriter接口的方法,参数是字符串,使用更方便
    42. */
    43. f.WriteString("写了\t一段\r\n内容123")
    44. fmt.Println("程序执行结束")