인터페이스를 구현하는 구조체를 만듭니다. 다른 구조체로 캡슐화하십시오. struct/dereference를 가져옵니다.golang - 참조 해제 후 struct에서 인터페이스 구현 인스턴스를 가져옵니다.
- 가져 오기는 인터페이스 구현에 대한 포인터를 가져옵니다.
- 포인터를 역 참조하면 인터페이스에 다른 지점이 생깁니다.
구현에 대한 포인터를 역 참조하지 않으면 구현 인스턴스가 제공되지 않는 이유는 무엇입니까? 의 속성을 액세스하려고
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