设为首页 收藏本站
查看: 921|回复: 0

[经验分享] 乐呵乐呵得了 golang入坑系列

[复制链接]

尚未签到

发表于 2018-9-20 11:15:56 | 显示全部楼层 |阅读模式
  开场就有料,今天返回去看了看以前的文章,轻松指数有点下降趋势。一琢磨,这不是我的风格呀。一反思,合着是这段时间,脑子里杂七杂八的杂事有点多,事情一多,就忘了快乐。古话说得好:愁也一天,乐也一天,只要还能过得去,完事不钻牛角尖。这话真应该变成座右铭,最次成口头禅也成。还有句古话是这么说:哭也一天,笑也一天,只要不做亏心事,就是活神仙。两句正好凑合对联,过年贴上,保准比那些个风调雨顺,国泰民安之类的对子好,还实用,您说是不是。
  烦自心中来,乐自脑中生。万事都有其两面性,看你怎么想。越想越好,可能坏事能变好。越想越坏,事还没变坏,自己个先把自己个吓死了。所以古人才创造了个塞翁失马焉知非福的寓言小故事,鲁迅先生也抽象出了阿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)
  }
  

  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 放这里,会收到很多妹子的邮件。 不管别人信不信,反正我信了。:)



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-598794-1-1.html 上篇帖子: golang的Channel 下篇帖子: Golang socket
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表