登录
首页 >  Golang >  Go问答

Go:怎么在一个没有返回值的方法中增加slice的长度,并且能更具下标进行修改

来源:SegmentFault

时间:2023-01-23 10:43:51 447浏览 收藏

本篇文章给大家分享《Go:怎么在一个没有返回值的方法中增加slice的长度,并且能更具下标进行修改》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

func main() {
    b := make([]string, 0, 1000)
    apppppend(b)
    fmt.Println(b)
}

func apppppend(b []string) {
    b = append(b, "")
}

直接传递b,虽然能根据下标进行修改元素但并不能改变b

func aaaaaaaaa(b *[]string) {
    *b[0] = "a"
}

得到

test.go|65 error| invalid operation: b[0] (type *[]string does not support indexing)

传递b的指针的话则相反

那么该怎么做呢

正确答案

直接传递b并不能改变b

这句话是有点问题的.. 不能对b执行append操作
但是可以改变b的,可以试一下

b[0] = "test"

slice的定义其实是这样的

type slice struct {
    array unsafe.Pointer
    len   int
    cap   int
}

如果你非得修改其len或者cap,只能传*slice

根据问题更新了一下代码示例

package main

import (
    "fmt"
)

func main() {
    b := make([]string, 0, 1000)
    apppppend(&b)
    fmt.Println(b)
}

func apppppend(b *[]string) {
    *b = append(*b, "first_element")  // 可以进行append
    *b = append(*b, "second_element") // 可以进行append
    (*b)[0] = "1st_element"           // []的优先级比*高,所以通过下标修改必须这样写

    // 但是总的来说..不能有返回值的函数在golang里面实在是太奇葩了
    // 建议别这样
}

好了,本文到此结束,带大家了解了《Go:怎么在一个没有返回值的方法中增加slice的长度,并且能更具下标进行修改》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表