Go语言中的代理模式通常采用接口来实现,具体实现步骤如下:
1.定义抽象接口,声明真实对象和代理对象共同遵循的行为方法。

type Subject interface {
    Request() string
}


2.定义真实对象,实现接口中的方法。

type RealSubject struct{}
func (rs *RealSubject) Request() string {
    return "RealSubject Request"
}


3.定义代理对象,同时实现接口中的方法,并持有真实对象的引用。

type Proxy struct {
    realSubject *RealSubject
}
func (p *Proxy) Request() string {
    if p.realSubject == nil {
        p.realSubject = &RealSubject{}
    }
    result := "Proxy prework\n"
    result += p.realSubject.Request()
    result += "\nProxy postwork"
    return result
}


4.客户端调用,通过代理对象来完成请求。

func main() {
    var sub Subject = &Proxy{}
    fmt.Println(sub.Request())
}


在这个例子中,代理模式被用来隐藏真实对象的复杂性,让客户端通过代理对象来完成请求。代理对象在请求前后,还可以执行其他的操作,例如日志记录等。