dave-wind / blog

native javascript blog
0 stars 0 forks source link

Go Memory Book #28

Open dave-wind opened 8 months ago

dave-wind commented 8 months ago

记录小问题

map[string]interface{} CRUD

type GoObject = map[string]interface{}
func main() {
  var para = GoObject{
    "File": make([]GoObject, 1), // []T 泛型类型 且使用make len =1 默认分配first 元素为 空对象 
}

// 创建一个新的 map[string]interface{} 类型的元素
newElement := GoObject{
    "key1": "value1",
    "key2": 42,
    "key3":1,
}

var newKey = "demo"

// 将新的元素添加到 "File" 字段的切片中 
 para["File"].([]GoObject)[0] = newElement
// 动态增加key 
para[newKey] = 1
fmt.Println(para["File"].([]GoObject)[0])

}

小结:
1.go强类型语言 interface{} 为任意类型;赋值的时候 需要类型断言 
    para["File"].([]GoObject) 否则  para["File"] 默认是interface{} (定义Para的时候 值的类型) ;赋值当然会报错
2.使用make函数 预先分配切片长度;如果设置len=0;则使用索引赋值 会报错。
   var arr = make([]GoObject, 0)
   arr[0] = 123  // 报错

3. 对于 make 函数初始化的切片 当 len = 0 可以用append 追加元素;
!!!但追加完 是俩条数据哦 默认 make 初始化 切片 len =0 会有一个空itm;😂
 eg:
  para["File"] = append(para["File"].([]GoObject), newElement)
 fmt.Println(para["File"])
 4.什么时候需要类型断言?
  使用的时候 就需要;断言 再 赋值
  5. 如果切片数组 只有一条数据 
  var para = GoObject{
        "File": make([]GoObject, 1),
}
// 索引 0 修改
para["File"].([]GoObject)[0] = GoObject{
        "File":     file,
        "FileName": "txt",
}