У меня очень похожий вопрос: Как связать http.Client в Go с IP-адресом
Единственное отличие состоит в том, что я хочу использовать http2. Транспорт.
С http.Transport это работает хорошо:
localAddr, err := net.ResolveIPAddr("ip", "<my local address>")
if err != nil {
panic(err)
}
webclient := &http.Client{
Transport: &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
DialContext: (&net.Dialer{
LocalAddr: &net.TCPAddr {
IP: localAddr.IP,
},
}).DialContext,
},
}
Как я видел здесь https://go.googlesource.com/net/+/master/http2/transport.go Структура http2.Transport имеет следующие свойства:
type Transport struct {
DialTLS func(network, addr string, cfg *tls.Config) (net.Conn, error)
TLSClientConfig *tls.Config
ConnPool ClientConnPool
DisableCompression bool
AllowHTTP bool
MaxHeaderListSize uint32
StrictMaxConcurrentStreams bool
t1 *http.Transport
connPoolOnce sync.Once
connPoolOrDef ClientConnPool // non-nil version of ConnPool
}
Но если я использую http2.Transport со свойством "t1" ...
localAddr, err := net.ResolveIPAddr("ip", "<my local address>")
if err != nil {
panic(err)
}
webclient := &http.Client{
Transport: &http2.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
t1 : &http.Transport{
DialContext: (&net.Dialer{
LocalAddr: &net.TCPAddr {
IP: localAddr.IP,
},
}).DialContext,
},
},
}
... Я получил ошибку:
unknown field 't1' in struct literal of type http2.Transport
Похоже на свойство ' t1 'не существует в http2.Transport.
Я смотрю на неправильную структуру http2.Transport или есть какие-то проблемы с версиями, или я должен сделать это другим способом?