Skip to content

Latest commit

 

History

History
63 lines (41 loc) · 1008 Bytes

static-proxy.md

File metadata and controls

63 lines (41 loc) · 1008 Bytes
  • 静态代理

目录:

示例

静态代理代码

package main

import "fmt"

type IMan interface {
	Walk() int
}

type ManProxy struct {
	manProxy IMan // 不能是指针
}

func (proxy *ManProxy) setProxy(man IMan) () {
	proxy.manProxy = man
}

func (proxy *ManProxy) Walk() int {
	proxy.manProxy.Walk()
	fmt.Println("proxy Walk")
	return 0
}

type Man struct {
}

func (man *Man) Walk() int {
	fmt.Println("man Walk")
	return 0
}

func main() {
	manProxy := &ManProxy{} // 是不是指针都行
	var manImpl IMan
	var man Man
	manImpl = &man //需要取地址, 调用man具体实现,而不是复制

	manProxy.setProxy(manImpl)
	manProxy.Walk()

	return
}

疑问: 为什么需要实现类的地址?(&man)以及manImpl = &man的原理是啥?

这里应该是编译器的解析规则,比如接口包含实现类的指针,我猜manImpl = &man语句就是把man结构实现的地址 赋给IMan的指针