Skip to content

Golangでechoサーバ

Posted on:2015年9月8日

最近 golang が気になります

golang の特徴はもはやわざわざここに書くまでも無いことだと思うので書きませんが, 気になっている理由を書いてみます.

こんな感じでしょうか.

Compiled Python っていう感じが非常に良さそうだなーと思っています.

というわけで Haskell に引き続き golang でも echo サーバを書いてみました

package main

import (
    "fmt"
    "io"
    "net"
)

func main() {
    listener, err := net.Listen("tcp", ":8080")
    if err != nil {
        panic(err)
    }
    for {
        conn, err := listener.Accept()
        if err != nil {
            panic(err)
        }
        go func(conn net.Conn) {
            defer conn.Close()
            echo(conn)
        }(conn)
    }
}

func echo(conn net.Conn) {
    buf := make([]byte, 256)
    for {
        n, err := conn.Read(buf)
        if err != nil {
            if err == io.EOF {
                break
            }
            panic(err)
        }
        if n == 0 {
            break
        }
        wn, err := conn.Write(buf[0:n])
        if err != nil {
            panic(err)
        }
        if wn != n {
            panic(fmt.Errorf("could not send all data"))
        }
    }
}

さすがは golang というかなんというか. ものすごく普通な空気を感じますね.

golang はこういう普通さが売りの1つだと思っています.