Goでhttp.Clientを使う際に
transport := &http.Transport{}
なんで&付けないとダメなのだろうと調べてみた。
付けないと
client := http.Client{
Transport: transport, // ここでエラーが出る
}
cannot use transport (type http.Transport) as type http.RoundTripper in field > value:
http.Transport does not implement http.RoundTripper (RoundTrip method
has pointer receiver)
怒られる。
RoundTrip method has pointer receiver
interfaceを実装する構造体で、メソッドにポインタレシーバを使うと
構造体を作成する際に、ポインタを取らないとダメらしい。
type Hoge interface {
SetName(name string)
GetName() string
}
type Sample struct {
Name string
}
func (s *Sample) GetName() string {
return s.Name
}
func (s *Sample) SetName(name string){
s.Name = name
}
func main() {
// var s Hoge = Sample{} これだと動かない
var s Hoge = &Sample{} // これは大丈夫
s.SetName("三井直樹")
fmt.Println(s.GetName())
}
気を付けよう。