zoukankan      html  css  js  c++  java
  • 深入理解 go slice

    看下面的几个例子:

    
    func modifyEle(array []int) {
    	for i := 0; i < len(array); i++ {
    		(array)[i] = i
    	}
    	fmt.Printf("modify   int  array len = %d, cap = %d \n", len(array), cap(array))
    }
    
    func main() {
    	array := []int{4, 3, 2, 1, 0}
    	fmt.Println(array)
    	
    	fmt.Printf("modify befort array len = %d, cap = %d \n", len(array), cap(array))
    	modifyEle(array)
    	fmt.Printf("modify after  array len = %d, cap = %d \n", len(array), cap(array))
    	fmt.Println(array)
    }
    
    

    结果:

    
    [4 3 2 1 0]
    modify befort array len = 5, cap = 5 
    modify   in   array len = 5, cap = 5 
    modify after  array len = 5, cap = 5 
    [0 1 2 3 4]
    
    
    

    上面这个例子中,slice 可以被修改。 再看一个例子。

    
    func deleteEle(array []int) {
    	array = array[:1]
    
    	fmt.Printf("delete   in   array len = %d, cap = %d \n", len(array), cap(array))
    }
    
    func main() {
    	array := []int{4, 3, 2, 1, 0}
    	fmt.Println(array)
    
    	fmt.Printf("delete befort array len = %d, cap = %d \n", len(array), cap(array))
    	deleteEle(array)
    	fmt.Printf("delete after array len = %d, cap = %d \n", len(array), cap(array))
    	fmt.Println(array)
    }
    
    

    结果

    [4 3 2 1 0]
    delete befort array len = 5, cap = 5 
    delete   in   array len = 1, cap = 5 
    delete after  array len = 5, cap = 5 
    [4 3 2 1 0]
    
    

    在上面这个例子中,删除slice 里的元素好像没成功。 继续看下面的例子

    
    func modifyEle(array []int) {
    	array = append(array, 1)
    	for i := 0; i < len(array); i++ {
    		(array)[i] = i
    	}
    	fmt.Printf("modify   in   array len = %d, cap = %d \n", len(array), cap(array))
    }
    
    func main() {
    	array := []int{4, 3, 2, 1, 0}
    	fmt.Println(array)
    	fmt.Printf("modify befort array len = %d, cap = %d \n", len(array), cap(array))
    	modifyEle(array)
    	fmt.Printf("modify after  array len = %d, cap = %d \n", len(array), cap(array))
    	fmt.Println(array)
    }
    
    

    这个例子跟第一个很像,但是结果完全不同。

    [4 3 2 1 0]
    modify befort array len = 5, cap = 5 
    modify   in   array len = 6, cap = 10 
    modify after  array len = 5, cap = 5 
    [4 3 2 1 0]
    
    

    理解了这三个例子,就完全理解 go slice 了。

    本文原创自博客园 地址:https://www.cnblogs.com/Heoric/
    我想要知道上帝是如何创造这个世界的。我对这个或那个现象不感兴趣,我要知道的是他的思想。其他都是细节。
  • 相关阅读:
    《第一行代码》阅读笔记(三十一)——多线程
    《第一行代码》阅读笔记(三十)——MVP(补充)
    《第一行代码》阅读笔记(二十九)——网络框架 OkHttp+Retrofit+Rxjava
    《第一行代码》阅读笔记(二十八)——网络技术(OkHttp+JSON/GSON)
    sql server优化查询速度(子查询)
    sql server 查询字段是否为数字
    Git操作汇总
    解决github下载过慢方式
    InnoDB存储引擎简介
    MySQL主从复制详解
  • 原文地址:https://www.cnblogs.com/Heoric/p/15753239.html
Copyright © 2011-2022 走看看