前言
在rpc中,客户端需要向服务调用中传入指针类型,下面介绍三种常用的传递方式
服务端代码
package main
import (
"net"
"net/rpc"
)
type Hello struct {
}
func (h *Hello) Talk(name string, response *string) error {
*response = "hello_" + name
return nil
}
func main() {
listen, _ := net.Listen("tcp", ":8081")
rpc.RegisterName("hello", &Hello{})
for {
accept, _ := listen.Accept()
go func() {
rpc.ServeConn(accept)
}()
}
}
客户端传入指针方式1
var a *string = new(string),传入不需要&
package main
import (
"fmt"
"net/rpc"
)
func main() {
client, _ := rpc.Dial("tcp", ":8081")
var s *string = new(string)
err := client.Call("hello.Talk", "kiki", s)
if err != nil {
fmt.Println(err)
}
fmt.Println(*s)
}
客户端传入指针方式2
var a *string,传入使用&可以为其分配一个地址,解决其为nil的问题
package main
import (
"fmt"
"net/rpc"
)
func main() {
client, _ := rpc.Dial("tcp", ":8081")
var s *string
err := client.Call("hello.Talk", "kiki", &s)
if err != nil {
fmt.Println(err)
}
fmt.Println(*s)
}
客户端传入指针方式3
var a string,传入使用&变为指针类型
package main
import (
"fmt"
"net/rpc"
)
func main() {
client, _ := rpc.Dial("tcp", ":8081")
var s string
err := client.Call("hello.Talk", "kiki", &s)
if err != nil {
fmt.Println(err)
}
fmt.Println(s)
}