【Golang】I/O操作

I/O接口源码:

Go 复制代码
type Reader interface {
	Read(p []byte) (n int, err error)
}
type Writer interface {
	Write(p []byte) (n int, err error)
}

一、标准I/O

从标准输入中读取数据:

NewReader需要传入一个实现了Reader接口的类,os.Sdtin的类型为*File,这个类实现了Reader接口,使用以下命令查看源码文档:

bash 复制代码
$ go doc os.File

os.Stdin对应1号文件描述符的文件,从标准输入读取数据:

Go 复制代码
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	buf := bufio.NewReader(os.Stdin)
	line, err := buf.ReadString('\n')
	if err != nil {
		fmt.Println("read Stdio error :", err)
	}
	fmt.Println("buf :", line)

}

输出数据到标准输出:

与标准输入同理

Go 复制代码
package main

import (
	"bufio"
	"os"
)

func main() {
	buf := bufio.NewWriter(os.Stdout)
	buf.Write([]byte("hello world"))
	buf.Flush()
}

二、文件I/O

使用IO标准库:

Go 复制代码
package main

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

func main() {
	file, _ := os.Open("./text.txt")
	defer file.Close()
	buf, _ := io.ReadAll(file)
	fmt.Println("file context :", string(buf))
}
Go 复制代码
package main

import (
	"io"
	"os"
)

func main() {
	file, _ := os.OpenFile("./text.txt", os.O_WRONLY|os.O_TRUNC, os.ModePerm)
	defer file.Close()
	io.WriteString(file, "ni hao")
}

三、网络I/O

Go 复制代码
package main

import (
	"bufio"
	"fmt"
	"net"
)

func main() {
	listener, _ := net.Listen("tcp", "127.0.0.1:1234")
	defer listener.Close()
	conn, _ := listener.Accept()
	conn.Write([]byte("hello world"))

	buf := bufio.NewReader(conn)
	line, _ := buf.ReadString('\n')
	fmt.Println("recv :", line)
}

若有错误,请大佬指出!

相关推荐
小七蒙恩5 分钟前
java下载文件流,不生成中间文件。
java·开发语言·状态模式
计算机_CodeMind10 分钟前
基于微信小程序的校园点餐平台的设计与实现(源码+SQL+LW+部署讲解)
开发语言·微信小程序·springboot·课程设计
黑风风25 分钟前
使用 `@Async` 实现 Spring Boot 异步编程
java·spring boot·后端
等一场春雨27 分钟前
Spring Boot 3 文件下载、多文件下载以及大文件分片下载、文件流处理、批量操作 和 分片技术
java·spring boot·后端
码喽不秃头31 分钟前
java中的特殊文件
java·开发语言
新手小袁_J31 分钟前
Python的列表基础知识点(超详细流程)
开发语言·python·numpy·pip·基础知识·基础知识点
jf加菲猫31 分钟前
条款35:考虑虚函数以外的其它选择(Consider alternatives to virtual functions)
开发语言·c++
听风吟丶35 分钟前
深入探究 Java hashCode:核心要点与实战应用
java·开发语言
【D'accumulation】38 分钟前
深入聊聊typescript、ES6和JavaScript的关系与前瞻技术发展
java·开发语言·前端·javascript·typescript·es6
AI人H哥会Java1 小时前
【Spring】Spring DI(依赖注入)详解——自动装配——手动装配与自动装配的区别
java·开发语言·后端·spring·架构