这篇是 Go 语言通俗小说入门教程之四,前篇请戳
最最通俗易懂,并带小说情节的Go语言入门教程,没有之一,不接受反驳
上回说道三胎不讲武德,硬干了三姨太的丫环,导致王麻子给他分配的住房不够了。
幸得祖师爷帮忙,给了他名为slice的法宝,可以动态分配住房,还被张三吐槽人家其他地方叫动态数组,他们祖师爷还非出风头,起个slice的名堂。
王麻子自是不想与张三计较,于是继续向祖师爷请教。
今日祖师爷兴致很高,便得意的在王麻子面前拿出了新玩意,Map。
祖师爷看着王麻子,语重心长的说,“鸟是鸟他妈生的,虫子是虫他妈生的,既然生了,就要给人家起个名字。天天1, 2, 3 ,4 的喊也不对,你说呢?”
既然祖师爷说了,王麻子自是不敢言语,唯有点头。
王麻子自付道:“饶是如此,怎么起名字?当初也就给他们一大家可以起个名字,`var 三娃子的姨太太们 [3] string`,想起名字也没地方啊。”
祖师爷似乎看穿了王麻子的想法,从怀里拿出了一个法宝。
此法宝似一串串小盒子,每个盒子上配一把钥匙,只是不知内为何物。
祖师爷笑着说道,“这叫`Map`。你需要如此如此使用。”,王麻子听后似懂非懂。
祖师爷说,“回家慢慢研究吧,我得回西方了。最近我们那里的佛祖与东方的佛祖互不对付,我呆久了容易被疑心叛界之罪。”
王麻子深深一拜,“祖师爷您只管回去,我自行研究就好了”。
话说这王麻子本资质一般,于是只得硬着头皮研究一番。
```go var 变量名 map[钥匙数据类型] 数据的数据类型 ```
王麻子因为有以前的基础,虽资质愚钝,但是也能明白一二。
于是口中念念有词:
```go /* 声明变量,默认 map 是 nil */ var 三娃子姨太太们 map [string] string /* 使用 make 函数初始化 */ 三娃子姨太太们 = make(map [string] string) ```
只见王麻子眼前竟然来了一串和祖师爷给他的一样的盒子,每个盒子上有一把钥匙。
王麻子继续念道:
```go 三娃子姨太太们["李氏"] = "如花" 三娃子姨太太们["赵氏"] = "二妮" 三娃子姨太太们["丑氏"] = "俊俊" ```
王麻子眼睛一睁,三娃子的姨太太们竟然都来了,兴匆匆的拿回了自己的钥匙,竟各自又跑回去了。
王麻子望着背影大喊,“都拿好嘅,不然我找不到你们了。”
姨太太们自顾自离去了,王麻子叹了口气,人多不好管。
张三听到王麻子叫唤,自是跑了过来。
“还嘅,嘅,我呸,这是西洋物,key,知道吗?”张三嘲讽的和王麻子说。
王麻子担心姨太太们听到笑话,脸憋的通红,“我自说的是Key,你耳朵听错了而已。”
说完悻悻地走了。
张三似乎又得逞了,把手往袖子里一插,得意的笑着,躺在了王麻子家院子外的树下,耳朵支棱起来。
王麻子以为张三走了,偷偷的拿出来祖师爷给的卷轴,只见还有几行咒语:
```go /*删除元素*/ delete(三娃的姨太太们, "丑氏") ```
王麻子四周看了看,竟然这次什么也没发生。
于是王麻子继续念到:
```go delete(三娃的姨太太们, "李氏") delete(三娃的姨太太们, "赵氏") ```
依然什么也没有发生,王麻子略对祖师爷有点失望。
不一会只见三娃哭着过来说,“老爷,大事不好了!”
王麻子略带嫌弃的说:“一个大男人成天哭哭啼啼的成何体统?” ,说着往门外瞅了瞅,他看见张三还在,于是压低声音问:
“别哭了,发生什么事了?”
三娃子说“我的媳妇每人从你这拿了一个钥匙回去后,刚开始还各自玩的好好的,怎地都突然不见了。先是俊俊,后来是如花,后来是二妮,都突然从我眼前消失了。”
王麻子此时突然恍然大悟,但是碍于面子,于是假装镇静的说,“媳妇而已,不见了我再给你娶,犯得着哭哭啼啼,让外人笑话吗?”,说着向三娃子示意外头有人。
三娃子自是伤心难耐,那顾得上这些,自顾自的嚎头大哭。
王麻子哄他说,祖师爷还给我一个法宝,我自是用不着,你可以拿这个法宝把他们找回来。
说着拿了出来。只见这个法宝看上去像一把尺子。
> Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。
```go package main import "fmt" func main() { //这是我们使用range去求一个slice的和。使用数组跟这个很类似 nums := []int{2, 3, 4} sum := 0 for _, num := range nums { sum += num } fmt.Println("sum:", sum) //在数组上使用range将传入index和值两个变量。上面那个例子我们不需要使用该元素的序号,所以我们使用空白符"_"省略了。有时侯我们确实需要知道它的索引。 for i, num := range nums { if num == 3 { fmt.Println("index:", i) } } //range也可以用在map的键值对上。 kvs := map[string]string{"a": "apple", "b": "banana"} for k, v := range kvs { fmt.Printf("%s -> %s\n", k, v) } //range也可以用来枚举Unicode字符串。第一个参数是字符的索引,第二个是字符(Unicode的值)本身。 for i, c := range "go" { fmt.Println(i, c) } } ```
三娃子一思忖,拿这个找老婆自然效率高,于是开心的走了。
王麻子看见三娃子走了,心想这不见了就不见了吧,能找回来了?
(欲听后续,敬请关注注本号。如果觉得有点意思,别忘了转发点赞哦!👇)