Golang 指针传递的常用方式

前言
在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)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值