不能使用 "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}}
一旦你决定了,你基本上有两个选择:
(在 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
,您只能像这样创建零值 FileMD
:FileMD{}
.导出您的字段,然后您可以指定文件名和大小的初始值:
type FileMD struct {
FileName string
FileSize int
}
// Now FileMD{"first", 1} is valid outside of package models
我是 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}}
一旦你决定了,你基本上有两个选择:
(在 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
,您只能像这样创建零值 FileMD
:FileMD{}
.导出您的字段,然后您可以指定文件名和大小的初始值:
type FileMD struct {
FileName string
FileSize int
}
// Now FileMD{"first", 1} is valid outside of package models