github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/prepare/11_reflect/face/main.go (about)

     1  package main
     2  
     3  type Duck interface {
     4  	Quack()
     5  }
     6  
     7  type Cat struct {
     8  	Name string
     9  	_    [0]byte
    10  }
    11  
    12  // 禁止 Quack 方法的内联编译
    13  //go:noinline
    14  func (c *Cat) Quack() {
    15  	println(c.Name + " meow")
    16  }
    17  
    18  // 得到汇编代码的方式
    19  // go tool compile -S -l -N main.go > s.txt;
    20  // go tool compile -N -l main.go;
    21  // go build -gcflags -S main.go
    22  func main() {
    23  	var c Duck = &Cat{Name: "draven"}
    24  	switch c.(type) {
    25  	case *Cat:
    26  		cat := c.(*Cat)
    27  		cat.Quack()
    28  	}
    29  }