【Day 21】Go 基础小笔记 II(pointer / array / slice / map / struct)

笔记会纪录与已知的 Python 的差别,
或是对我来说比较需要记忆的部分。
初学 Go 不建议看这几篇文章。

2021/10/15 更新:因为写 merge sort 对 slice 的理解提升了一些,稍微对 array 和 slice 增加一些东西。

pointer

  • 指标部分看起来跟 C 差不多?
  • nil

array

  • 长度固定
  • 宣告 arr := [5]string{"a", "b", ...略}
  • ...:後面有初始化,可以省略长度不用自己算有几个~真聪明
    i.e. arr := [...]string{"Iron Man", "Dr.Stange", "Thor"}
  • 跟 Python 一样的 len
  • range:Python equivalence 为 enumerate
for i, v := range 阵列 {
    fmt.Println(i, v)
}

slice

这篇很详细且有图片[Golang] Slice and Array

  • 长度可增减
  • 可以直接宣告,也可以从 array 取出。
  • 直接宣告的样子就像是没有限制长度的 array ([]int 是 int slice)
  • slice 感觉像是纪录 array 头尾的 reference,取出阵列的一部份并更动时会动到原资料。
    Python 中的 slice 比起来就比较像是复制一部分的 list 出来,更动时不会动到原来的资料。
arr := [5]string{"dog", "dog", "dog", "dog", "dog"}
slice := arr[1:4]
slice[0] = "cat"
// 这时 arr[1] 变为 cat 
  • cap() 表示此 slice 开头到 原来阵列的结尾 的长度
  • 不像 Python list 切超过还是会回传值,Go 会喷错
    i.e. arr 有 5 个元素
arr[1:100] # python 会回 arr[1:5]
arr[1:100] // go:out of bounds for 5-element array)
  • make 动态产生 slice
// len, cap = 2
slice1 := make([]string, 2) 
// len 2 cap 5
slice2 := make([]string, 2, 5)

  • append
    slice = append(slice, "new string")
    若 cap 不足会动态增加,cap *= 2

map

  • Python 的 dictionary
  • 宣告
// 至少要说好 key 的型别
var m1 map[string]
// key 为 string,value 为 int 
var m2 = map[string]int {"aaa": 30, "bbb": 45}
  • value 有「预设值」,没这个 key 也会有那个型别的预设值回传而不是 key error
    以上面的 m2 做例子
fmt.Println(m2["ccc"]) // 印出 0
  • 检查 key 是否存在,用第二个回传值
v, keyExist = m2["ccc"]
  • 遍历 map(跟 Python 一样不保证顺序)
for k, v := range m2 {
    fmt.Println(k, v)
}
  • delete 删除不存在的也不会喷错
    delete(m2, "bbb")

<<:  Day 21:工作术

>>:  【Side Project】 订单清单 - 未完成清单(後台资料传前台&动态生成html)

Day09. 睡觉时间让Blue Prism来代劳吧!医护人辛苦了-BP写入资料到Excel工作表

新冠肺炎(Covid-19)疫情全球蔓延,造成全球性大流行的威胁, 台湾对於防疫措施的努力从来不落人...

【Day28】this - call, apply, bind 与严谨模式

call, apply, bind 方法 当我们对函式使用 call, apply, bind 这三...

Sass 基础教学 DAY31

Sass 我们应该大部分的人都有听过 那它到底是什麽东西呢?? 我们先来介绍它到底是啥 维基百科ht...

Day10:程序码编辑器的实用扩充套件(2)

一、前言   上一篇文章介绍了 VSCode 好用的快捷键,此篇开始介绍其他扩充之实用功能罗。没意外...

[Day 48] 留言板後台及前台(四) - 处理留言板内容

我们之前的web.php没有考虑到编辑留言板的部分, 所以我们在留言板的後面再加上一列 //编辑留言...