• 深入理解 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/
    我想要知道上帝是如何创造这个世界的。我对这个或那个现象不感兴趣,我要知道的是他的思想。其他都是细节。
  • 相关阅读:
    Fiddler localhost问题
    Ajax 'sys'未定义
    将字符串中的危险字符替换掉函数 ReplaceStr()
    如何重新注册asp.net 2.0
    Asp.net CS页面调用Javascript进行Alert输出
    Asp.net中插入Flash
    向awk中传递数组
    内存泄漏简介
    awk基本语法几则
    自然连接和等值连接
  • 原文地址:https://www.cnblogs.com/Heoric/p/15753239.html
Copyright © 2020-2023  润新知