Golang input/output: Difference between revisions
From wikinotes
(→Files) |
|||
Line 62: | Line 62: | ||
Buffered Reading | Buffered Reading | ||
<syntaxhighlight lang="go"> | <syntaxhighlight lang="go"> | ||
// create or open file for reading | // create or open file for reading | ||
filepath = "/var/tmp/foo.txt" | filepath = "/var/tmp/foo.txt" | ||
fd, err := os.Open(filepath) // open for reading | fd, err := os.Open(filepath) // open for reading | ||
fd, err := os.Create(filepath) // create, or truncate file (0666 perms) | fd, err := os.Create(filepath) // create, or truncate file (0666 perms) | ||
// read up to 5 bytes | // read up to 5 bytes | ||
buf := make([]byte, 5) | buf := make([]byte, 5) | ||
bytes_r, err := fd.Read(buf) | bytes_r, err := fd.Read(buf) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Revision as of 20:12, 18 June 2022
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
Reading
Small Files
require "os" // read entire file into []byte conts, err := os.ReadFile("/var/tmp/foo.txt")Buffered Reading
// 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) // read up to 5 bytes buf := make([]byte, 5) bytes_r, err := fd.Read(buf)Reader interface
Writing
Small Files
require "os" // replace file (creating if necessary) err := os.WriteFile("/var/tmp/foo.txt", []byte("abc"), 0644)Buffered Writing
fd, err := os.Create(filepath) // create, or truncate file (0666 perms) check(err) bytes_w, err := fd.Write([]byte("abc")) check(err) bytes_w, err := fd.WriteString("abc") check(err) fd.Sync()Writer interface
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