2020年7月4日土曜日

開発環境

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 コメント:

コメントを投稿