文件IO
- io包
- pipe 该方法返回一个PipeReader和一个PipeWriter指针
pipe管道通过内存进行同步控制,是一个无缓冲管道,比如type pipe struct { wrMu sync.Mutex // 写时锁 wrCh chan []byte // 数据存储单元 rdCh chan int // 数据存储长度 ... } type PipeWriter struct { p *pipe // 共享pipe } type PipeReader struct { p *pipe // 共享pipe } ...
import ( "io" ) func main() { r, w := io.Pipe() buf := make([]byte, 128) go func() { println("done") r.Read(buf) println(string(buf)) }() go w.Write([]byte("hello")) for true { //因为如果主函数结束,所有goroutine会被终止 //通过阻塞主函数保证其他goroutine执行完成 } }
- pipe 该方法返回一个PipeReader和一个PipeWriter指针
- io/ioutil包
- ReadAll 从一个reader中读取所有数据,返回读到的字节 slice
func ReadAll(r io.Reader) ([]byte, error)
- ReadDir 读取一个目录,返回目录中的文件信息数组 []os.FileInfo
func ReadDir(dirname string) ([]os.FileInfo, error)
- ReadFile 读一个文件,返回文件内容(字节slice)
func ReadFile(filename string) ([]byte, error)
- WriteFile 将字节slice写入文件
func WriteFile(filename string, data []byte, perm os.FileMode) error
- TempDir 创建指定前缀名的临时目录,返回创建目录的路径
func TempDir(dir, prefix string) (name string, err error)
- TempFile 创建指定前缀名的临时文件,返回创建后的文件指针
func TempFile(dir, prefix string) (f *os.File, err error)
- ReadAll 从一个reader中读取所有数据,返回读到的字节 slice
网络通信
- Tcp
- client
import ( "net" ) func main() { conn, _ := net.Dial("tcp", "127.0.0.1:65535") defer conn.Close() conn.Write([]byte("echo data to server ,then to client!!!")) buf := make([]byte, 1024) conn.Read(buf) println("receive : ", string(buf)) }
- server
import ( "net" ) func main() { l, _ := net.Listen("tcp", "127.0.0.1:65535") defer l.Close() for { conn, err := l.Accept() if err != nil { return } //处理tcp请求 go handleConnection(conn) } } func handleConnection(conn net.Conn) { buf := make([]byte, 1024) conn.Read(buf) println("recieve : ", string(buf)) conn.Write([]byte("hello from server")) }
- Udp
- client
import ( "net" ) func main() { //第二个参数是本地绑定的addr,不指定由系统随机分配 socket, _ := net.DialUDP("udp4", nil, &net.UDPAddr{ IP: net.IPv4(127, 0, 0, 1), Port: 23452, }) defer socket.Close() senddata := []byte("hello from udpClient!") socket.Write(senddata) // 接收数据 data := make([]byte, 4096) socket.ReadFromUDP(data) println("recieve : ", string(data)) }
- server
import ( "net" ) func main() { socket, _ := net.ListenUDP("udp4", &net.UDPAddr{ IP: net.IPv4(127, 0, 0, 1), Port: 23452, }) defer socket.Close() for { // 读取数据 data := make([]byte, 1028) _, remoteAddr, err := socket.ReadFromUDP(data) if err != nil { continue } println("recieve : ", string(data)) // 发送数据 senddata := []byte("hello from udpServer!") _, err = socket.WriteToUDP(senddata, remoteAddr) if err != nil { return } } }
- client
- client