Golang中国

fanyang

Golang China 第 6369 号会员,加入于 2016-11-13 23:23


fanyang最近回复了


回复了 samete 创建的主题: go死锁的问题 2016-12-27 15:38

Q:为什么打印的结果是0 1 2 3 4 ?
A:c := <-ch1每次从通道里取出一个数,len(ch1)就会减1,当j=5, len(ch1)=5

回复了 silenceper 创建的主题: gowatch - 热编译工具,提升开发效率 2016-12-27 15:21

挺方便,不过我现在用beego.Run()也能热编译

回复了 fanyang 创建的主题: go根据字符动态设置结构体字段名--hprose rpc应用 2016-12-24 16:35

解决方案

//服务端设置
type TestServer struct{
    Name string
    Data map[string]interface{}
}
func (t *TestServer) Foo (data map[string]interface{})string{
    //do thing...
}
func (t *TestServer) Bar (data map[string]interface{})string{
    //do thing...
}
func Run(data []byte)string{
    ts := new(TestServer)
    err := json.Unmarshal(data, ts)
    if err != nil {
        return "数据类型不正确: " + err.Error()
    }

    fun := reflect.ValueOf(ts).MethodByName(strings.Title(ts.Name))
    if !fun.IsValid() {
        return "服务不存在: " + ts.Name
    }
    param := make([]reflect.Value, 1)
    param[0] = reflect.ValueOf(ts.Data)

    return fun.Call(param)[0].String()
}
srv := rpc.NewTCPServer("ip")//hprose rpc
srv.AddFunction("Run", Run)


//客户端调用
type Test struct{
   Run func([]byte) string
}
var test *Test
client := rpc.NewClient("ip")
client.UseService(&test)

test.Run( data ) //data is json: {"name":"Foo","data": ... }
回复了 fanyang 创建的主题: 那种动态调用技术效率最高? 2016-12-08 14:35

看样子比lua还要好点,我得一个个测试下性能

回复了 fanyang 创建的主题: 那种动态调用技术效率最高? 2016-12-08 11:49

好的,不过我这两天还测试了个方案,生成api

回复了 fanyang 创建的主题: 那种动态调用技术效率最高? 2016-12-03 14:19

可惜1.8还在测试

// hello.go
package main

import "fmt"

func Hello(name string)string{
return fmt.Sprintf("Hello,%s",name)
}

$ go build -buildmode=c-shared hello.so hello.go

// main.go
package main

import (
   "plugin"
   "fmt"
  )

func main() {
 p, _ = plugin.Open("hello.so")
 f := p.Lookup("Hello")
 fmt.Println(f.(func(string)string)("golang"))
// Hello,golang
}
回复了 gogo 创建的主题: 怎样把一个结构体转换成相应的map结构? 2016-11-24 15:41

@helloworld 那个是为了和关键字区分开

fanyang 创建的更多回复