开场就有料,今天返回去看了看以前的文章,轻松指数有点下降趋势。一琢磨,这不是我的风格呀。一反思,合着是这段时间,脑子里杂七杂八的杂事有点多,事情一多,就忘了快乐。古话说得好:愁也一天,乐也一天,只要还能过得去,完事不钻牛角尖。这话真应该变成座右铭,最次成口头禅也成。还有句古话是这么说:哭也一天,笑也一天,只要不做亏心事,就是活神仙。两句正好凑合对联,过年贴上,保准比那些个风调雨顺,国泰民安之类的对子好,还实用,您说是不是。

烦自心中来,乐自脑中生。万事都有其两面性,看你怎么想。越想越好,可能坏事能变好。越想越坏,事还没变坏,自己个先把自己个吓死了。所以古人才创造了个塞翁失马焉知非福的寓言小故事,鲁迅先生也抽象出了阿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入坑系列的更多相关文章

  1. 初生牛犊不怕虎 golang入坑系列

    读前必读,下面所有内容都是来自这里. 放到这里的目的,就是为了比对一下,哪里的读者多.平心而论,同样的Markdown,博客园排版真心X看,怎么瞅怎么X看.(X := '难' || X :='耐' | ...

  2. 入坑第二式 golang入坑系列

    史前必读: 这是入坑系列的第二式,如果错过了第一式,可以去gitbook( https://andy-zhangtao.gitbooks.io/golang/content/ )点个回放,看个重播.因 ...

  3. 维多利亚的秘密 golang入坑系列

    原文在gitbook,字字原创,版权没有,转载随意. 在写本文的前一天,2017维密在上海开始了. 为了纪念屌丝界的盛世,特为本节起名维多利亚的秘密.现在的社会,要想出名只有抓眼球.所以写份技术文章, ...

  4. 准备冲锋 golang入坑系列

    史前摘要: 本来想写读前必读,但连续几篇博文都写读前必读,感觉就没有了新意. 所以换成史前摘要,反正是一个意思. 此摘要的目的仍然是提醒点击而来的同学,本系列最新文章在这里.放到博客园的目的是为了方便 ...

  5. 坐忘峰 golang入坑系列

    读前必读: 本文写于20日,首发于gitbook. 迟到的是日期,没变的是内容. 点击进入 https://andy-zhangtao.gitbooks.io/golang/content/ 可以看到 ...

  6. 分水岭 golang入坑系列

    第三式开篇语有些负面, 所以这里就不贴了.有兴趣的自己可以去看看 https://andy-zhangtao.gitbooks.io/golang/content/ .怒发冲冠,意气之作.看完就完了, ...

  7. 崩溃 golang入坑系列

    早上(11.30)收到邮件,Vultr东京机房网络故障.当时搭建SS时,考虑到了机房故障.所以特意分出了日本和香港两条线路.但千算万算,忘记数据库还在东京机房中. 现在网络故障,SS服务器无法读取数据 ...

  8. 来自朝鲜的问候 golang入坑系列

    鸿渐于陆 本想着写满十八式,但按照目前的进度来看,是很难凑够十八式了.所以还是那句话,量力而行,适可而止.能写多少就写多少,我没法保证看完这本golang脱口秀,一定能成为golang大拿.但入了门, ...

  9. 脱掉Golang的第一层衣裳 golang入坑系列

    读前必读,博客园的文章并非最新,想看最新还是建议点击这里.博客园的文章是为了方便不能FQ的同学,同步而来的.不放在博客园,不是不支持国产,而是博客园的排版太难看了,太难看了,太难看了!而且还没有客户端 ...

随机推荐

  1. 我的第一个python web开发框架(13)——工具函数包说明(四)

    string_helper.py是字符串操作包,主要对字符串进行检查.过滤和截取等处理. #!/usr/bin/evn python # coding=utf-8 import re def chec ...

  2. PHP垃圾回收机制

    一.引用计数基本知识 每个php变量存在一个叫"zval"的变量容器中,当一个变量被赋常量值时,就会生成一个zval变量容器.一个zval变量容器,除了包含变量的类型和值,还包括两 ...

  3. LeetCode 48. Rotate Image(旋转图像)

    You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...

  4. VUE 源码学习01 源码入口

    VUE[version:2.4.1] Vue项目做了不少,最近在学习设计模式与Vue源码,记录一下自己的脚印!共勉!注:此处源码学习方式为先了解其大模块,从宏观再去到微观学习,以免一开始就研究细节然后 ...

  5. Python基础学习参考(三):内置函数

    一:内置函数 在第一篇文章中,我们简单的认识了一下print()函数和input()函数,也就是输入和输出,这些函数我们可以直接的调用,不要自己定义或者引入什么,对吧?想这样的函数就叫做内置函数.这里 ...

  6. Tomcat请求头过大

    今天开发反应Tomcat的请求头过大 <Connector port="8280" protocol="HTTP/1.1" connectionTimeo ...

  7. javascript中的变量、作用域和内存问题

    1.变量 变量的值的类型:基本类型值和引用类型值两种. 基本类型:Undefined.Null.Boolean.String.Number,这五类基本数据类型的值在内存中占有固定大小的空间,因此保存在 ...

  8. 高性能 AJAX

    请求数据的常用的五种方式 1.XMLHttpRequest (XHR) var url = '/data.php'; var params = [     'id=934875',     'limi ...

  9. replace 使用函数作为第二参数

    var sToChange = “The sky is red.”;var reRed = /red/;var sResultText = sToChange.replace(reRed, funct ...

  10. Oracle 数据库常用操作语句大全

    一.Oracle数据库操作 1.创建数据库      create database databasename 2.删除数据库      drop database dbname 3.备份数据库 完全 ...