假设对象A有一个类型为
net.Dialer
的字段。我想为对象A提供一个自定义实现的net.Dialer
,以增强Dial
方法。在Go中是否可行?我尝试使用嵌入字段来实现:package main
import (
"net"
"fmt"
)
type dialerConsumer struct {
dialer net.Dialer
}
func (dc *dialerConsumer) use() error {
conn, e := dc.dialer.Dial("tcp", "golang.org:http")
if e != nil {
return e
}
fmt.Printf("conn: %s\n", conn)
return nil
}
type customDialer struct {
net.Dialer
}
func main() {
standardDialer := net.Dialer{}
consumer := &dialerConsumer{
dialer: standardDialer,
}
consumer.use()
/*
customDialer := customDialer{
net.Dialer{},
}
consumer = &dialerConsumer{
dialer: customDialer,
}
consumer.use()
*/
}
然而,当我取消注释 main
中的代码时,我会得到以下编译错误:
src/test.go:38: cannot use customDialer (type customDialer) as type net.Dialer in field value
net.Dialer
被定义为一个结构体而不是接口:https://golang.org/pkg/net/#Dialer 我还应该提到,我无法控制对象 A,因此我不能修改它来使用一个新的接口,该接口可以包括 Dialer 的公共方法Dial
和DialContext
。 - Paul IA
,那么您是正确的,您无法将Dialer
接口分配给它,在 Go 中,除了将net.Dialer
分配给类型为net.Dialer
的字段之外,您不能分配任何其他东西... 下一个最好的方法是包装对象A
并在调用Dial
之前执行所需的操作。 - mkopriva