创建一个实现接口的结构。将其封装到另一个结构中。获取结构/取消引用它。
Fetching 获取指向接口实现的指针。
取消引用指针会导致另一个指向接口的点。
为什么不取消引用指向实现的指针会给出实现实例?
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(取消注释dialTLS := tmp1.DialTLS)的属性会导致编译错误...
tmp1.DialTLS undefined (type http.RoundTripper has no field or method 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>}
我正在尝试做的是访问DialTLSTransport 实例。
潇湘沐
相关分类