请教一个 golang 的泛型问题

2023-05-25 10:26:15 +08:00
 wtfedc
golang 的 openai package 有这么几段
type ChatCompletionStreamResponse struct {
	ID      string                       `json:"id"`
	Object  string                       `json:"object"`
	Created int64                        `json:"created"`
	Model   string                       `json:"model"`
	Choices []ChatCompletionStreamChoice `json:"choices"`
}
type CompletionResponse struct {
	ID      string             `json:"id"`
	Object  string             `json:"object"`
	Created int64              `json:"created"`
	Model   string             `json:"model"`
	Choices []CompletionChoice `json:"choices"`
	Usage   Usage              `json:"usage"`
}
type streamable interface {
	ChatCompletionStreamResponse | CompletionResponse
}
type streamReader[T streamable] struct {
	emptyMessagesLimit uint
	isFinished         bool

	reader         *bufio.Reader
	response       *http.Response
	errAccumulator errorAccumulator
	unmarshaler    unmarshaler
}
有两个问题:
  1. ChatCompletionStreamResponse | CompletionResponse 中的 struct 之间的表达式还能用|?是只能在 interface 中用吗?
  2. streamReader 的 泛型 T ,只在形参( T 不是参数,这个表达不对,大概想这个意思,你懂我)声明,struct 内部没用到啊,这么玩意义何在
项目地址

go-openai

672 次点击
所在节点    问与答
1 条回复
GopherDaily
2023-05-25 10:33:20 +08:00
1. 可以直接看语言的 spec https://go.dev/ref/spec#Interface_types
2. method 的定义中估计用到了


看,generic 果然好丑好抽象

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/942784

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX