インタフェースを実装する構造体を作成します。 別の構造体にカプセル化します。 struct/dereferenceを取得します。golang - 参照解除後に構造体からインタフェース実装インスタンスを取得
- フェッチは、インターフェイスの実装へのポインタを取得します。
- ポインタを間接参照すると、インターフェイスの別のポイントになります。
なぜインプリメンテーションへのポインタを参照解除すると実装インスタンスが得られないのですか?プロパティにアクセスしようとしている
package main
import (
"fmt"
"net/http"
"golang.org/x/net/http2"
)
func main() {
transport := &http2.Transport{}
client := &http.Client{Transport: transport}
tmp1 := client.Transport
tmp2 := &client.Transport
tmp3 := &tmp1
fmt.Printf("%T\n%T\n%T\n", tmp1, tmp2, tmp3)
//dialTLS := tmp1.DialTLS
}
このコードの出力...
*http2.Transport
*http.RoundTripper
*http.RoundTripper
同様に、
tmp1
コンパイルエラーになり...
tmp1.DialTLS undefined (type http.RoundTripper has no field or method DialTLS)
(dialTLS := tmp1.DialTLS
のコメントを外します)。 ..でも、fmt.Printf("%+v", tmp1)
出力...
&{DialTLS:<nil> TLSClientConfig:0xc8203ec8c0 ConnPool:<nil> DisableCompression:false MaxHeaderListSize:0 t1:<nil> connPoolOnce:{m:{state:0 sema:0} done:0} connPoolOrDef:<nil>}
私がしようとしているのは、トランスポートインスタンスのDialTLS
アクセスです。
ああ、私は私の主張に 'http2.Transport'へのポインタを指定するために忘れてしまいました!どうもありがとう! – chaseisabelle