乐呵乐呵得了 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的同学,同步而来的.不放在博客园,不是不支持国产,而是博客园的排版太难看了,太难看了,太难看了!而且还没有客户端 ...
随机推荐
- LeetCode 532. K-diff Pairs in an Array (在数组中相差k的配对)
Given an array of integers and an integer k, you need to find the number of unique k-diff pairs in t ...
- 【20171028早】ubuntu 16.04 LTS 安装php遇到的问题
背景: 10月28日的一个早上,老黑一如往常地练习,我测试不破坏,当时我找到sqli-libs 游戏,可是我没有立即开始,于是,奇妙的事情就由php开始了.ubuntu16.04安装相关环境 apac ...
- python 使用标准库连接linux实现scp和执行命令
import stat import pexpect 只显示关键代码: sqldb = localpath+database //获取database名字 if os.path.exists(sqld ...
- TreeView简单的动态加载数据
简单的小记录,省得去看控件属性详情了,基本常用的属于就几个 先是判断根节点是否存在控件中,如果不存在则创建,之前要添加了节点同样的方法 把根节点传到子节点的方法中,再判断是否在根节点里存在子节点,如果 ...
- Python_Python遍历列表的四种方法
方式一: app_list = [1234, 5677, 8899] <!-- lang: python --> for app_id in app_list: <!-- lang: ...
- Hive中常用的查询命令
日志数据的统计处理在这里反倒没有什么特别之处,就是一些 SQL 语句而已,也没有什么高深的技巧,不过还是列举一些语句示例,以示 hive 处理数据的方便之处,并展示 hive 的一些用法. a) ...
- Android 开发笔记___实战项目:购物车
购物车的应用很广泛,电商app基本上都有它的身影.由于它用到了多种存储方式,通过项目对数据的存储有更高层次的了解. 1.设计思路 首先看看购物车的外观.第一次进入时里面是空的,去购物页面加入购物车以后 ...
- 「Vue」起步 - vue-router路由与页面间导航
vue-router 我们知道路由定义了一系列访问的地址规则,路由引擎根据这些规则匹配找到对应的处理页面,然后将请求转发给页进行处理.可以说所有的后端开发都是这样做的,而前端路由是不存在"请 ...
- 浅析is和as两个关键词在类型转换时的使用
is检查对象是否兼容与指定类型,返回Boolean值true或者false,值得注意的是,在使用is进行类型转换的时候是永远不会抛出异常的,例如: object o=new Object(); Boo ...
- linux-touch
linux-touch 用于创建文件或者更新文件的修改日期 命令参数 - d yyyymmdd:把文件的存取或修改时间改为 yyyy年mm月dd日 - a :只把文件的存取时间改成当前时间 - m: ...