在 TCP 编程中, 很常见要根据客户端发送过来的自定义协议包, 通过解析协议包的指定部分信息, (一般为字符串) 来调用指定包中的指定方法。如何优雅的调用呢?
使用 golang 反射实现它!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
package handle
import "fmt"
type PingReq struct { Message string SendAt int }
type Handle struct { }
func New() *Handle { return new(Handle) }
func (h *Handle) Chat (pr PingReq) { fmt.Println(pr) }
package main
import ( "labcode/handles" "reflect" )
func main() { hd := handle.New() hdv := reflect.ValueOf(hd) chatMethed := hdv.MethodByName("Chat") if !chatMethed.IsValid() { return } abc := handle.PingReq{ Message: "Wen Lo", SendAt: 121212, } param := []reflect.Value{reflect.ValueOf(abc)} chatMethed.Call(param) }
|
**这样就能根据 Chat
这个字符串调用上了 Chat 方法