Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 如何在sqlite中插入数组?_Go_Sqlite - Fatal编程技术网

Go 如何在sqlite中插入数组?

Go 如何在sqlite中插入数组?,go,sqlite,Go,Sqlite,我有如下结构: type Foo struct { bars []string } 由于sqlite3不支持数组数据类型,我们是否可以将[]字符串存储为字符串,并在检索return时将其存储为字符串的片段?试图实现如下所示,但由于类型不匹配而出现错误。这里需要做什么 编辑:我已经更改了代码,看起来正在工作 type strArray []string func (strarr StrArray) Value() (driver.Value, error) { if strarr

我有如下结构:

type Foo struct {
  bars []string
}
由于sqlite3不支持数组数据类型,我们是否可以将
[]字符串
存储为字符串,并在检索return时将其存储为字符串的片段?试图实现如下所示,但由于类型不匹配而出现错误。这里需要做什么

编辑:我已经更改了代码,看起来正在工作

type strArray []string

func (strarr StrArray) Value() (driver.Value, error) {
    if strarr != nil {
        resarr := strings.Join(strarr, "")
        return resarr, nil
    }
    return nil, nil
}

作为对
数据库/sql/driver.Valuer
的补充,您还需要实现
数据库/sql.Scanner
,以便从数据库中读取您的类型。 当您考虑如何实现它时,很明显,在
Valuer
中,您应该
使用一些分隔符字符/字符串(当然不出现在数据中)连接您的切片,以便在检索时
将其拆分回来

假设这样的分隔符是
(我的猜测),用于阅读的代码如下所示:

func (a *strArray) Scan(value interface{}) error {
  if value == nil {
    return nil  // case when value from the db was NULL
  }
  s, ok := value.(string)
  if !ok {
    return fmt.Errorf("failed to cast value to string: %v", value)
  }
  *a = strings.Split(s, ";")
  return nil
}
在编写时,需要在
Valuer
实现中使用
strings.Join(strarr,“;”)


其他不那么简单的实现需要封送您的片,并以某种方式将结果字节编码为字符串(base32/64?json?)。在任何情况下,在将不同的切片元素保存到数据库时都不需要丢失这些信息。

包括完整的错误消息。
strings。Split
用于将字符串拆分为切片,而不是将切片转换为字符串。您可能希望加入
而不是