扫描仪可以有切片接收器吗?

时间:2018-08-02 08:50:31

标签: go

“扫描器”界面(https://golang.org/pkg/database/sql/#Scanner)使得配置数据库/ sql API如何从已从数据库读取的数据反序列化类型变得非常容易。

我已经以各种方式使用它来处理自己的类型,但是我只是尝试将非规范化的字符串列表读入字符串切片中,例如

Sub EmailAQuery()

Dim QueryName As String
Dim FileType As Variant
Dim EmailAddresses As String
Dim SubjectLine As String
Dim BodyText As String

QueryName = "Quarterly Figures"
FileType = acFormatXLSX
EmailAddresses = "bob@company.com; Sally@company.com"
SubjectLine = "Quarterly Figures for " & Format(Date, "mmmm yyyy")
BodyText = "Please see the Quarterly figures data for " & Format(Date, "mmmm yyyy") & ", attached."

Call SafeSendQuery(QueryName, FileType, EmailAddresses, SubjectLine, BodyText)

End Sub

Scan接收器通常是指向该类型的零值实例的指针。在我要写的情况下,它是切片。

这可能吗?

如果是这样,如何确定切片的大小(直到扫描程序开始解析(例如通过在逗号或类似内容上分割输入字符串)才知道)?

1 个答案:

答案 0 :(得分:0)

是的,这是可能的,但是您想改为在* Roles上定义方法。然后,您可以根据需要扩展切片。

<div class="content">

数据库/ sql库将使用类似的方式

func (rs *Roles) Scan(value interface{}) error {
    ...  check not nil
    ...  split string into words
    *rs = make(RosterRoles, len(words))
    ...  range across the words
}

感谢@Peter的回答。