Golang input/output
From wikinotes
Documentation
fmt
https://pkg.go.dev/fmt@go1.18.2 io/ioutil
(read/write)https://pkg.go.dev/io/ioutil@go1.18.3 textproto
(sockets)https://pkg.go.dev/net/textproto@go1.18.3
Stdin, Stdout, Stderr
fmt.Fprintln(os.Stdout, "writes stdout") fmt.Fprintln(os.Stderr, "writes stderr")
Reader, Writer
// read a file into `[]bytes` until EOF conts, err := os.ReadAll(reader)buf := make([]byte, 64) _, err := os.ReadFull(reader, buf) // fill buffer to capacity, reading from reader switch { case errors.Is(err, os.EOF): // nothing to read (0 bytes) case errors.Is(err, os.ErrUnexpectedEOF): // end of file, before filling buffer }filepath := "/var/tmp/foo.txt" _, err := os.WriteString(writer, "abcd")
Files
If the files are small, you can work with them using
os
require "os" contents = []byte("abc") err := os.WriteFile("/var/tmp/foo.txt", contents, 0644) conts, err := os.ReadFile("/var/tmp/foo.txt")If the files are larger, read in in chunks.
func check(e error) { if e != nil { panic(e) } } // create or open file for reading filepath = "/var/tmp/foo.txt" fd, err := os.Open(filepath) // open for reading fd, err := os.Create(filepath) // create, or truncate file (0666 perms) check(err) // read up to 5 bytes buf := make([]byte, 5) bytes_read, err := fd.Read(buf) check(err)
Networking
Sockets
net.Dial()
creates sockets of various types.import "net" // unix socketfile conn, err = net.Dial("unix", "/var/tmp/foo.sock") // inet socket conn, err = net.Dial("tcp", "10.10.10.10:6600") defer conn.Close() // sending message to socket _, err = conn.Write([]byte("search title 'it ceases to be'")) reply := make([]byte, 1024) _, err = conn.Read(reply) fmt.Println(string(reply))HTTP