開発環境
- macOS Catalina - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Go (プログラミング言語)
Go Systems Programming: Master Linux and Unix system level programming with Go (渋川 よしき(著)、ごっちん(イラスト)、ラムダノート)、第2章(低レベルアクセスへの入り口1:io.Writer)、2.8(問題)、Q2.3(gzipされたJSON出力をしながら、標準出力にログを出力)の解答を求めてみる。
コード
package main
import (
"compress/gzip"
"encoding/json"
"fmt"
"io"
"net/http"
"os"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Println(r.URL)
w.Header().Set("Content-Encoding", "gzip")
w.Header().Set("Content-Type", "application/json")
writer := gzip.NewWriter(w)
defer writer.Close()
mulWriter := io.MultiWriter(writer, os.Stdout)
encoder := json.NewEncoder(mulWriter)
err := encoder.Encode(map[string]string{
"Hello": "World",
"プログラミング言語": "Go",
})
if err != nil {
fmt.Fprintln(os.Stdout, err)
return
}
writer.Flush()
})
http.ListenAndServe(":8080", nil)
}
入出力結果(Zsh、PowerShell、Terminal)
% go run ./main.go
/
{"Hello":"World","プログラミング言語":"Go"}
/favicon.ico
{"Hello":"World","プログラミング言語":"Go"}
^Csignal: interrupt
%
0 コメント:
コメントを投稿