Hollis

<span style="font-weight: bold;">Hollis写字的地方...</span>

Leng-xuan-2's Leetcode chart

rpcx学习笔记

入门案例

案例1

使用 rpcx 默认的数据序列化方案:golang 原生 struct + msgpack。

service

定义一个简单的服务和数据结构,用于演示如何使用 Go 语言中的 rpcx 框架实现远程过程调用(RPC)。

 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
// Package example defines data structure and services.
package example
type Args struct {
    A int
    B int
}
type Reply struct {
    C int
}
type Arith int
func (t *Arith) Mul(ctx context.Context, args *Args, reply *Reply) error {
    reply.C = args.A * args.B
    fmt.Printf("call: %d * %d = %d\n", args.A, args.B, reply.C)
    return nil
}
func (t *Arith) Add(ctx context.Context, args *Args, reply *Reply) error {
    reply.C = args.A + args.B
    fmt.Printf("call: %d + %d = %d\n", args.A, args.B, reply.C)
    return nil
}
func (t *Arith) Say(ctx context.Context, args *string, reply *string) error {
    *reply = "hello " + *args
    return nil
}
type Greeter struct{}
func (s *Greeter) Say(ctx context.Context, name *string, reply *string) error {
    *reply = fmt.Sprintf("hello %s!", *name)
    return nil
}

以上代码展示了如何通过 rpcx 框架实现了一个简单的 RPC 服务:

常见获取输入的方式

1.获取同一行的n个数据

1
2
var a, b, c, d int
fmt.Scanln(&a, &b, &c, &d)

2.获取n行数据

从键盘获取n,然后获取n行数据。

1
2
3
4
5
6
7
8
9
var n int
var arr []int
fmt.Scanln(&n)
for n > 0 {
    var temp int
    fmt.Scanln(&temp)
    arr = append(arr, temp)
    n--
}

3.获取未知行数的数据

从键盘获取多行文本,直到用户输入一个空行为止。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
func main() {
    var lines []string
    scanner := bufio.NewScanner(os.Stdin) // 创建一个新的Scanner,它将从键盘读取数据
    for scanner.Scan() { // 循环读取输入,直到没有更多的输入数据或遇到错误
       text := scanner.Text() // 从Scanner读取当前行并作为字符串存储在text变量中
       if text == "" {        // 检查读取的行是否为空字符串(即用户输入了一个空行)
          break
       }
       lines = append(lines, text)
    }
    fmt.Println(lines)
}

这种方式是最通用的,无论输入什么数据类型,输入多少行,程序都可以正常接收,接收到数据的都是 string 类型。

0%