定义一个接口类型来输入参数,如下所示:
func CallByteWriterGen[W io.ByteWriter](w W, bytes []byte) {
_ = w.WriteByte(bytes[0])
}
Run Code Online (Sandbox Code Playgroud)
...通过字典导致额外的指针取消引用(使用 AX 传递):
MOVQ 0x10(AX), DX // <-- extra pointer dereference
MOVQ 0x18(DX), DX
MOVZX 0(CX), CX
MOVQ BX, AX
MOVL CX, BX
CALL DX
Run Code Online (Sandbox Code Playgroud)
仅使用接口参数可能无法实现哪些好处,如下所示:
func CallByteWriter(w io.ByteWriter, bytes []byte) {
_ = w.WriteByte(bytes[0])
}
Run Code Online (Sandbox Code Playgroud)