Goメモ

http

http.HandlerFunchttp.Handlerインターフェイス

Request *

Client *

Transport *

url *

json

stringからmapへ
mapからstringへ

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	var data interface{}
	s := `{"id": 1, "name": "foo", "data": [{"abc": "efg"}, 1234]}`
	json.Unmarshal([]byte(s), &data)
	fmt.Println(data)
	b, _ := json.Marshal(data)
	fmt.Println(string(b))
}

// map[data:[map[abc:efg] 1234] id:1 name:foo]
// {"data":[{"abc":"efg"},1234],"id":1,"name":"foo"}

time

net/http *

Client

req.AddCookie(&http.Cookie{Name: "a", Value: "b"})
req.AddCookie(&http.Cookie{Name: "c", Value: "d"})
// Cookie: a=b; c=d

reflect

rv := reflect.ValueOf(foo)
t := reflect.TypeOf(*(Bar)(nil)).Elem()
if rv.Type().implements(t) {
   ...
}

Channel

channelがcloseされたらとまる

for v := ch {
  ...
}

stringを格納するChannelを返す関数

func foo(bar string) <-chan string {
}
v, isClose = ch

Library

Syntax

package main

import "fmt"

type Foo struct {
	v string
}

func (f *Foo) foo() {
	fmt.Println(f.v)
}

type Bar struct {
	Foo
}

func (b *Bar) bar() {
	fmt.Println(b.v)
}

func main() {
	b := &Bar{}
	b.v = "1234"
	b.foo()
	// 1234
	b.bar()
	// 1234
}

switch

    switch t {
    case Foo:
        return ...
    default:
        return ...
    }
    
    switch v {
    case v < 1:
        return ...
    default:
        return ...
    }

fmt

Interfaces

Cast

type FooFunc func(int, int)


func (f FooFunc) ServeHTTP(w, req int) {
    f(w, req)
}

func Foo(w, req int) {
    fmt.Fprintln(w, req)
}

handler := FooFunc(Foo)

Map

// okはキーが存在しているか
_, ok := dict[key]

httptestメモ
GoのGzipメモ