たなしょのメモ

日々勉強していることをつらつらと

Goの学習メモ8

Goメモ

Readers

データストリームを読み込むio.Readerストリームが存在するらしい。
8byteとずつ読み込ませて表示するソースコードが下記。

package main

import (
    "fmt"
    "io"
    "strings"
)

func main() {
    r := strings.NewReader("Hello,Reader!")

    b := make([]byte, 8)
    for {
        n, err := r.Read(b)
        fmt.Printf("n = %v err = %v\n", n, err, b)
        fmt.Printf("b[:n] = %q\n", b[:n])
        if err == io.EOF {
            break
        }
    }
}

8byteの配列を確保している。

b := make([]byte, 8)

r.Readで8byteずつ読み込み、読み込んだ文字数、errが返ってきていないか、配列の中身を表示している。

n, err := r.Read(b)
fmt.Printf("n = %v err = %v\n", n, err, b)
fmt.Printf("b[:n] = %q\n", b[:n])

最後にerrの値がEOF(つまり文字がなくなったら)ならfor文を抜ける。

if err == io.EOF {
    break
}

image

imageインターフェースがあるらしいなんのために使うんだろう。

package main

import (
    "fmt"
    "image"
)

func main() {
    m := image.NewRGBA(image.Rect(0, 0, 100, 100))
    fmt.Println(m.Bounds())
    fmt.Println(m.At(0, 0).RGBA())
}

goroutines

goroutineというものが出てきた。
どういう動きをするかは現段階ではわかっていない。

package main

import (
    "fmt"
    "time"
)

func say(s string) {
    for i := 0; i < 5; i++ {
        time.Sleep(199 * time.Millisecond)
        fmt.Println(s)
    }
}

func main() {
    go say("world")
    say("hello")
}