首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Golang中使用反射包删除切片中的所有元素?

如何在Golang中使用反射包删除切片中的所有元素?
EN

Stack Overflow用户
提问于 2017-07-03 18:05:00
回答 1查看 1K关注 0票数 0

我正在尝试创建一个函数,它可以像这样重置传递的切片:

代码语言:javascript
复制
func resetSlice(slice interface{}) {
    v := reflect.ValueOf(slice)
    s := v.Type().Elem() 
    // QUESTION: How to reset the slice here?
}

usernames := []string{"Hello", "World"}
resetSlice(&usernames)

fmt.Println(usernames) // OUTPUT  : [Hello World]
                       // EXPECTED: []

但我不知道如何重置指针切片。创建一个与指针切片具有相同类型的新切片

代码语言:javascript
复制
reflect.New(v.Type().Elem())

然后替换指针切片?但是怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-03 18:13:48

请改用reflect.MakeSlice

代码语言:javascript
复制
package main

import (
    "fmt"
    "reflect"
)

func resetSlice(slice interface{}) {
    v := reflect.ValueOf(slice)
    v.Elem().Set(reflect.MakeSlice(v.Type().Elem(), 0, v.Elem().Cap()))
}


func main() {
    a := []string{"foo", "bar", "baz"}  
    resetSlice(&a)
    fmt.Println(a)
}

https://play.golang.org/p/JNWE0hCsQp

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44882827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档