乐呵乐呵得了 golang入坑系列
开场就有料,今天返回去看了看以前的文章,轻松指数有点下降趋势。一琢磨,这不是我的风格呀。一反思,合着是这段时间,脑子里杂七杂八的杂事有点多,事情一多,就忘了快乐。古话说得好:愁也一天,乐也一天,只要还能过得去,完事不钻牛角尖。这话真应该变成座右铭,最次成口头禅也成。还有句古话是这么说:哭也一天,笑也一天,只要不做亏心事,就是活神仙。两句正好凑合对联,过年贴上,保准比那些个风调雨顺,国泰民安之类的对子好,还实用,您说是不是。
烦自心中来,乐自脑中生。万事都有其两面性,看你怎么想。越想越好,可能坏事能变好。越想越坏,事还没变坏,自己个先把自己个吓死了。所以古人才创造了个塞翁失马焉知非福的寓言小故事,鲁迅先生也抽象出了阿Q这么个丰满的人物。事无定论,运无长势,谁知道下一秒会变成什么样呢。所以嘛,乐呵乐呵得了。别老挣着面粉的钱,操着白粉的心了。
上节聊了聊切片的基本使用规则。 讲真话,单靠我那一点点文字,没法把切片讲的透透彻彻,明明白白。如果真要讲到那个份,估计没等看完,你就该睡着了。入门嘛,够用就行。等入完门,真要用到那么高深规则的时候,自己再去查都来得及。所以甭喷讲的浅,讲深才不是我的风格呢。
这节,我们来接着切片(数组)的感觉往下聊如何遍历迭代。我刚接触Golang的时候,经常需要迭代数组里面的元素,最简单的方式是写个下标,然后不停的循环累加,取下标的值。这是到哪都通用的方式,但如果遇到map了呢?就不适用了。所以Golang内置了range操作来迭代集合数据结构。
先看看如何迭代数组或者切片:
numbers := []int{0,1,2,3,4,5,6,7,8}
for i:= range numbers {
fmt.Println("Slice item",i,"is",numbers[i])
}
range后面紧跟切片变量,而且前面肯定是for。此时i就是数组下标,循环一次,i会自增加一,直到numbers循环完毕。上面刚说除了可以迭代切片,还可以除了map。因为map存在key和value,所以range就有两种写法:
countryCapitalMap := map[string] string {"France":"Paris","Italy":"Rome","Japan":"Tokyo"}
for country := range countryCapitalMap {
fmt.Println("Capital of",country,"is",countryCapitalMap[country])
}
for country,capital := range countryCapitalMap {
fmt.Println("Capital of",country,"is",capital)
}
此时,range可以依次取出key,也可以同时取出key和value。此时需要注意,key的不是由ragne来保证,而是由map来决定的。range操作只不过是挨个依次取出数据集合中的元素而已。
本来range操作是需要放到上节中说的,但临近中午都要吃饭嘛,所以犯懒没写。这节补上,反正range操作仅此而已。但既然提到了map,那就开聊map吧。平时我也是这样,随便来个话头都能继续聊下去,几个朋友瞎扯淡,不就是没事找事,没话找话嘛。事先打草稿,一准是事先预谋好的(这里就要由衷的表扬一下各个公司的CXO,随便一人洋洋洒洒就能脱口秀好几个小时,要想融到资,必须打小就要学会有条理的瞎扯淡)。所以想哪就写哪,下面聊map。
Map基本是各种编程语言中必备的一种数据类型,所以Golang也不能拉下这种重要的东西。Golang不比Java,map是接口,还实现了hashmap,linkedhashmap 还有treemap. Golang当中没有那么多的实现,只有hashmap。非要在说一个map,那就是bitmaps(应该是没有其它map了,查看官方文档和查看golang源码也没有找到其它map。如果你发现还有其它类型的map,请告诉我,应该是没了)。
bitmap和hashmap都不是一路人,所以不提也罢。因此下面的map指的就是hashmap。先说怎么创建一个map,这里要用到make函数了,在创造切片的时候用过它,在golang当中创建各种数据类型,基本都会用到它。
map_variable := make(map[key_data_type]value_data_type)
比如,我们创造一个map,key是string,value是int。就是;
myMap := make(map[string]int)
不需要指定大小,因为map会自动扩容。这样就可以下面就可以使用myMap了。 如果喜欢文绉绉的风格,还可以这么做:
var myMap map[string]int
myMap = make(map[string]int)
效果一个样,但代码行数变两行(V2EX还有人讽刺说,如果我的文章按行算就发财了。 对不起,一来不收费。二来哪家公司按行算?典型的说话不过大脑,讽刺找不到穴位)。 还是那句话,选择哪个都行,高兴就好。
结合上面的range操作,把map也糅合进去:
package main
import "fmt"
func main() {
var countryCapitalMap map[string]string
countryCapitalMap = make(map[string]string)
countryCapitalMap["France"] = "Paris"
countryCapitalMap["Italy"] = "Rome"
countryCapitalMap["Japan"] = "Tokyo"
countryCapitalMap["India"] = "New Delhi"
for country := range countryCapitalMap {
fmt.Println("Capital of",country,"is",countryCapitalMap[country])
}
}
在日常使用过程当中,有两个操作经常出现,一判断指定Key是否存在。二删除指定Key。
先来回答第一个问题,如果判断指定Key是否存在:
capital, ok := countryCapitalMap["United States"]
if(ok){
fmt.Println("Capital of United States is", capital)
} else {
fmt.Println("Capital of United States is not present")
}
ok是个bool值,用来表示指定的Key是否存在,简单明了。然后回答第二个问题,如何删除?
delete(countryCapitalMap,"France")
恩,就用delete函数,简单粗暴。对于Golang来说,个人感觉应该是入门难度相对很低的一门语言了,除了语法稍微要适应一下,基本没有太大的学习成本。以前的知识和储备都不需要扔掉,换个壳子就能用。
今天周五(12.1)了,也不知道你能看下去多少,反正我是写不了多少了。 所以俩手指绕绕脑袋,休息一下,休息一小下儿吧。
据说把邮箱地址 ztao8607@gmail.com 放这里,会收到很多妹子的邮件。 不管别人信不信,反正我信了。
乐呵乐呵得了 golang入坑系列的更多相关文章
- 初生牛犊不怕虎 golang入坑系列
读前必读,下面所有内容都是来自这里. 放到这里的目的,就是为了比对一下,哪里的读者多.平心而论,同样的Markdown,博客园排版真心X看,怎么瞅怎么X看.(X := '难' || X :='耐' | ...
- 入坑第二式 golang入坑系列
史前必读: 这是入坑系列的第二式,如果错过了第一式,可以去gitbook( https://andy-zhangtao.gitbooks.io/golang/content/ )点个回放,看个重播.因 ...
- 维多利亚的秘密 golang入坑系列
原文在gitbook,字字原创,版权没有,转载随意. 在写本文的前一天,2017维密在上海开始了. 为了纪念屌丝界的盛世,特为本节起名维多利亚的秘密.现在的社会,要想出名只有抓眼球.所以写份技术文章, ...
- 准备冲锋 golang入坑系列
史前摘要: 本来想写读前必读,但连续几篇博文都写读前必读,感觉就没有了新意. 所以换成史前摘要,反正是一个意思. 此摘要的目的仍然是提醒点击而来的同学,本系列最新文章在这里.放到博客园的目的是为了方便 ...
- 坐忘峰 golang入坑系列
读前必读: 本文写于20日,首发于gitbook. 迟到的是日期,没变的是内容. 点击进入 https://andy-zhangtao.gitbooks.io/golang/content/ 可以看到 ...
- 分水岭 golang入坑系列
第三式开篇语有些负面, 所以这里就不贴了.有兴趣的自己可以去看看 https://andy-zhangtao.gitbooks.io/golang/content/ .怒发冲冠,意气之作.看完就完了, ...
- 崩溃 golang入坑系列
早上(11.30)收到邮件,Vultr东京机房网络故障.当时搭建SS时,考虑到了机房故障.所以特意分出了日本和香港两条线路.但千算万算,忘记数据库还在东京机房中. 现在网络故障,SS服务器无法读取数据 ...
- 来自朝鲜的问候 golang入坑系列
鸿渐于陆 本想着写满十八式,但按照目前的进度来看,是很难凑够十八式了.所以还是那句话,量力而行,适可而止.能写多少就写多少,我没法保证看完这本golang脱口秀,一定能成为golang大拿.但入了门, ...
- 脱掉Golang的第一层衣裳 golang入坑系列
读前必读,博客园的文章并非最新,想看最新还是建议点击这里.博客园的文章是为了方便不能FQ的同学,同步而来的.不放在博客园,不是不支持国产,而是博客园的排版太难看了,太难看了,太难看了!而且还没有客户端 ...
随机推荐
- Unix时代的开创者Ken Thompson
自图灵奖诞生以来,其获得者一直都是计算机领域的科学家与学者,而在所有这些界的图灵奖中只有唯一的一届有个例外,那就是Ken Thompson与Dennis M. Ritchie,他们都是计算机软件工程师 ...
- vue数据请求
我是vue菜鸟,第一次用vue做项目,写一些自己的理解,可能有些不正确,欢迎纠正. vue开发环境要配置本地代理服务.把config文件加下的index.js里的dev添加一些内容, dev: { e ...
- mysql中多个left join子查询写法以及别名用法
不多说 直接上语句 SELECT a.id, a.thumbNail, a. NAME, a.marketPrice, a.memberPrice, ...
- myeclipse自动保存修改代码
当你修改过代码后,myeclipse往往要你手动的保存代码才能运行这个修改后的代码,要是不保存就会一直运行修改前的代码.只要修改myeclipse中这两项,就可以让它编译运行修改后的代码: Windo ...
- JavaNIO非阻塞模式
package com.java.NIO; import java.io.IOException; import java.net.InetSocketAddress; import java.nio ...
- 阿里云centos配置postfix
1. 为了防止垃圾邮件,先到域名控制面板设置好. MX A 记录及TXT记录 其中TXT记录如下 @ spf1 a mx ~all 意思就是使用spf1协议,允许a记录和MX记录对应的IP,不允许 ...
- MySQL锁学习之UPDATE
##==============================================================================## 学MySQL也蛮长时间了,可一直停 ...
- Android开发之漫漫长途 Ⅳ——Activity的显示之ViewRootImpl初探
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...
- 【Arduino】使用LCD1602和DHT11制作温湿度显示器
材料: 1.DHT11 2.LCD1602 3.LCD1602 转接板 4.Arduino UNO 5.Arduino 传感器扩展版 那个Arduino UNO 我当初挑类个便宜的山寨货买,结果发来和 ...
- mybatis取数据库为null的字段
数据库中存在int型的字段,但是初始值为null,mybatis取值之后就会报错, org.apache.ibatis.binding.BindingException: Mapper method ...