golang小结 2

array, slice, map

遍历

    for k,v:=range m { //v可省
        fmt.Println(k,v)
    }

数组

  • 一维数组定义

    var arr1 = [4]int{1, 2, 3}
    var arr2 = [...]int{1, 2, 3}
    fmt.Printf("%T, %v, %d %d\n", arr1, arr1, len(arr1), cap(arr1))
    fmt.Printf("%T, %v, %d %d\n", arr2, arr2, len(arr2), cap(arr2))
    /*
    [4]int, [2 3 4 0], 4 4
    [3]int, [1 2 3], 3 3
    */
    
  • 多维数组定义

    var arr1 = [3][2]int{{1, 2},
        {3, 4},
        {5, 6},
    }
    fmt.Println(arr1, len(arr1), len(arr1[0])
    //[[1 2] [3 4] [5 6]] 3 2
    )
    
  • 注意事项

    • 数组不能更改长度

        //arr1 = append(arr1, 2)
        //arr1 = [5]int{3, 4, 5}
      
    • 数组是值类型,赋值会进行完整拷贝

      func foo(x [3]int, y []int) {
          fmt.Println(&x[0], &y[0])
      }
      func test3() {
          arr1 := [...]int{1, 2, 3}
          fmt.Println(&arr1[0])
          foo(arr1, arr1[:])
      }
      //0xc042008440
      //0xc042008480 0xc042008440
      
    • 程序在运行时会自动对数组进行越界检查

切片

  • 构造切片

    var s1 []int = []int{1, 2}
    var s2 = make([]int, 10,20)
    var s3 = make([]int, 10)
    // make内置函数,是可重载的特例 make(type, len, cap=len)
    a := [...]int{1, 2, 3, 4, 5}
    var s4 = a[1:3] //切片名称的由来,底层数组相同
    var s5 = append([]int{}, a[1:3]...)//底层数组不同,可变参数的使用
    
  • 切片修改

    //增加
    s2 = append(s2,1)
    s2 = append(s2, s1...)
    //增加有可能会更换底层数组
    //删除
    index:=5
    s2 = append(s2[:index],s2[index+1:])
    //插入
    r = append([]int,s2[index:]...)//必须重新分配个临时空间
    s2 = append(s2[:index],123)
    s2 = append(s2, r...)
    //拷贝 copy(dst,src) 拷贝大小为两者len的最小值
    func testcopy() {
        s1 := []int{1, 2, 3}
        s2 := []int{4, 5}
        copy(s1, s2)
        fmt.Println(s1)
        s1 = []int{7, 8, 9}
        copy(s2, s1)
        fmt.Println(s2)
    }
    /*
    [4 5 3]
    [7 8]
    */
    
  • 注意事项

    • 切片是引用类型。对切片内元素的更改,会对底层数组造成更改,对底层数组的更改,也会造成对切片元素的更改
    • 对于同时使用底层数组,或切片共享底层数组时需特别注意

字典

func test1() {
    a := map[string]int{"abc": 1,
        "cda": 2,
    }//构造
    a["haha"] = 4//插入
    delete(a, "abc")//删除
    for k, _ := range a {//_可省
        fmt.Println(k, a[k])
    }
    b := make(map[int]string, 2)// make(type, cap=0) 指定cap应该有所优化
    b[3] = "good"
    fmt.Println(b)
}
func test2() {
    for i := 0; i < 5; i++ {
    m := map[int]string{
        0: "a", 1: "a", 2: "a", 3: "a", 4: "a",
        5: "a", 6: "a", 7: "a", 8: "a", 9: "a",
    }
    fmt.Println(m)//map[int] 的实现方式不一定是有序的,每次遍历的结果可能不一样
    for k := range m {
        m[k+k] = "x"//插入或修改
        delete(m, k)
    }
    fmt.Println(m)
    }
}
/*
cda 2
haha 4
map[3:good]
map[1:a 3:a 5:a 9:a 0:a 2:a 4:a 6:a 7:a 8:a]
map[8:x 18:x 48:x 14:x 2:x 6:x 10:x 32:x]
map[0:a 5:a 6:a 7:a 9:a 1:a 2:a 3:a 4:a 8:a]
map[18:x 24:x 4:x 20:x 16:x 6:x 28:x]
map[1:a 2:a 4:a 6:a 0:a 5:a 7:a 8:a 9:a 3:a]
map[10:x 18:x 28:x 6:x 2:x 16:x 24:x]
map[0:a 2:a 5:a 8:a 1:a 3:a 4:a 6:a 7:a 9:a]
map[6:x 14:x 2:x 8:x 12:x 20:x 18:x 32:x]
map[8:a 9:a 0:a 3:a 6:a 5:a 7:a 1:a 2:a 4:a]
map[18:x 12:x 10:x 14:x 2:x 16:x]
*/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容

  • 01.{ 换行: Opening Brace Can't Be Placed on a Separate Lin...
    码农不器阅读 2,401评论 0 14
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 3,830评论 0 6
  • 切片 切片定义: 切片(slice)是对数组一个连续片段的引用,所以...
    liuxuech阅读 822评论 0 0
  • 我于梦中寻一段时空的穿越, 在烟雨朦胧的青石小巷, 懈逅我的儒雅少年。 我不求他王侯将相,鲜衣怒马, 只愿相望斜阳...
    君若狸阅读 121评论 0 0
  • 我的老公朱先生,一向是个好脾气先生,我们在争执之后,通常不会采取大吼大叫的形式解决问题。但是某晚吵架之后,他在电话...
    李小静11阅读 953评论 0 0