Go 语言的一个语法糖,使用起来非常方便:
// 值传递
func example1() {
req := OpenAIRequest{}
req.Model = "gpt-3" // 用 . 访问
req.MaxTokens = 100 // 用 . 访问
}
// 指针传递
func example2() {
req := &OpenAIRequest{}
req.Model = "gpt-3" // 还是用 . 访问,不需要写 (*req).Model
req.MaxTokens = 100 // 还是用 . 访问,不需要写 (*req).MaxTokens
}
Go 自动帮我们做了解引用,所以:
- req.Field
和 (*req).Field
是等价的
- 不需要像 C 那样写 ->
- 使用指针的代码看起来和值类型一样简洁
这就是为什么改成指针传递后,代码调用方式基本没变,只是声明和参数类型改了。