不能使用 "a"(类型字符串)作为 go 中数组元素的类型

Cannot use "a" (type string) as type in array element in go

我是 Golang 的新手,我在向数组添加项目时遇到问题。

我用这个link作为参考golang-book

我有这个结构:

package models

type FileMD struct {
    fileName string
    fileSize int
}

两种方法我都试过了,但都失败了。

fileList := [...]models.FileMD{"a", 1: "b", 2}
var fileList [...]models.FileMD
fileList[0] = "a", 1

正确的方法是什么?

我不确定,但我想你正在寻找:

fileList[0] = FileMD{"a", 1}

或者也许:

fileList := []FileMD{{"a", 1}, {"b", 2}}

首先你需要决定是否要 array or a slice.

一旦你决定了,你基本上有两个选择:

(在 Go Playground 上试用完整的应用程序。)

1) 用文字:

使用 Composite literal(数组或切片文字)初始化您的 array/slice,您就完成了。

数组:

fileArr10 := [2]FileMD{FileMD{"first", 1}, FileMD{"second", 2}}
// Or short:
fileArr11 := [2]FileMD{{"first", 1}, {"second", 2}}
// With length auto-computed:
fileArr20 := [...]FileMD{FileMD{"first", 1}, FileMD{"second", 2}}
// Or short:
fileArr21 := [...]FileMD{{"first", 1}, {"second", 2}}

切片(注意数组和切片文字之间的唯一区别是未指定长度):

fileSl10 := []FileMD{FileMD{"first", 1}, FileMD{"second", 2}}
// Or short:
fileSl11 := []FileMD{{"first", 1}, {"second", 2}}

2) 新建,初始化 array/slice 并填充它:

创建一个新的、已初始化的 array/slice 并通过为其元素赋值来填充它。

数组:

fileArr := [2]FileMD{}
fileArr[0] = FileMD{"first", 1}
fileArr[1] = FileMD{"second", 2}

Slice:(可以使用内置函数make创建切片)

fileSl := make([]FileMD, 2)
fileSl[0] = FileMD{"first", 1}
fileSl[1] = FileMD{"second", 2}

最后的笔记

您的结构 FileMD 是包的一部分,它包含未导出的字段(名称以小写字母开头的字段)。

无法从包外部访问未导出的字段。这也意味着当你创建一个这样的结构的值时,你不能指定未导出字段的初始值。

因此,如果您尝试从包 models 外部创建值 FileMD,您只能像这样创建零值 FileMDFileMD{} .导出您的字段,然后您可以指定文件名和大小的初始值:

type FileMD struct {
    FileName string
    FileSize int
}

// Now FileMD{"first", 1} is valid outside of package models