当前位置: 首页 > 面试题库 >

声明切片还是制作切片?

濮阳功
2023-03-14
问题内容

在Golang中,var s []int和之间有什么区别s := make([]int, 0)

我发现这两种方法都可行,但是哪一种更好?


问题答案:

除了fabriziom的答案外,您还可以在“转到切片:用法和内部方法”中看到更多示例,其中[]int提到了的用法:

由于slice(nil)的零值就像 零长度的slice一样 ,您可以声明slice变量,然后在循环中附加到该变量:

// Filter returns a new slice holding only
// the elements of s that satisfy f()
func Filter(s []int, fn func(int) bool) []int {
    var p []int // == nil
    for _, v := range s {
        if fn(v) {
            p = append(p, v)
        }
    }
    return p
}

这意味着,要附加到切片,您不必先分配内存:nil切片p int[]足以作为要添加的切片。



 类似资料:
  • 在Go中,和之间有什么区别? 我发现两者都有效,但哪一个更好?

  • 创建一个拦截器类,在方法执行前后打印一句日志 package net.wendal.nutzbook.aop; import org.nutz.aop.ClassAgent; import org.nutz.aop.ClassDefiner; import org.nutz.aop.DefaultClassDefiner; import org.nutz.aop.InterceptorChain

  • org.nutz.ioc.aop.config.impl.JsonAopConfigration 看看一个示例的ioc配置文件 配置示例: var ioc = { log : { type :'org.nutz.aop.interceptor.LoggingMethodInterceptor' }, myMI : { type : 'org

  • 问题内容: 我很好奇拆包切片并将其作为参数发送给可变参数函数。 假设我们有一个带有可变参数的函数: 如果我们不想传入一个接口,它就可以工作,那么我们是否拆包都没关系: 如果我们有一片片的话,那会很棘手。在这里,编译器不允许我们传递解压版本: 错误提示: 在解包参数中不能将sliceOfSlices(类型[] [] interface {})用作类型[] interface {} 我不知道为什么会这

  • 注意:声明切片还是制作切片?没有回答我的问题,因为这比较了slice声明和make slice,而我的问题比较了slice literal和make slice。这个问题的答案很简单,因为裸片声明创建了一个nil片,但是,如果您仔细阅读下面的问题,我根本不会创建nil片。 有两种方法可以创建切片并追加到它。下面的代码以和两种方式显示。 输出: 使用和创建空切片的两种方法是否等效?在任何情况下,他们

  • 取一个list或tuple的部分元素是非常常见的操作。比如,一个list如下: >>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] 取前3个元素,应该怎么做? 笨办法: >>> [L[0], L[1], L[2]] ['Michael', 'Sarah', 'Tracy'] 之所以是笨办法是因为扩展一下,取前N个元素就没辙了。 取前N个元素