美文网首页Go语言用例Go知识库
golang append函数的一个坑

golang append函数的一个坑

作者: CodingCode | 来源:发表于2018-04-22 16:30 被阅读5次

    golang append的一个坑

    今天又踩到append函数的一个坑了,概况起来,如下

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        var s = make([]string, 10)
        s = append(s, "aaa")
    
        fmt.Printf("s[0]=[%s]\n", s[0])
    }
    

    运行结果为:

    $ go build && ./main
    s[0]=[]
    

    What? 难道不应该输出 s[0]=[aaa] 吗?

    修改一下代码,把所有元素打出来:

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        var s = make([]string, 10)
        s = append(s, "aaa")
    
        fmt.Printf("s[0]=[%s]\n", s[0])
    
        for i, v := range s {
            fmt.Printf("s[%d]=[%s]\n", i, v)
        }
    }
    

    结果是:

    $ go build && ./main
    s[0]=[]
    s[0]=[]
    s[1]=[]
    s[2]=[]
    s[3]=[]
    s[4]=[]
    s[5]=[]
    s[6]=[]
    s[7]=[]
    s[8]=[]
    s[9]=[]
    s[10]=[aaa]
    

    "aaa"怎么是第s[10]的元素呢,前面s[0]~s[9]都是空串。

    原因append总是在当前slice的最后添加元素,当我们用 var s = make([]string, 10) 初始化s的时候,就已经为s创建了10个元素,每一个元素的值都是空串,调用append函数的时候会发现此时s已经有10个元素了,所有"aaa"会被添加进第11个元素。

    相关文章

      网友评论

        本文标题:golang append函数的一个坑

        本文链接:https://www.haomeiwen.com/subject/zonakftx.html