Golang 从切片追加函数“已评估但未使用”中删除 dup ints

Posted

技术标签:

【中文标题】Golang 从切片追加函数“已评估但未使用”中删除 dup ints【英文标题】:Golang remove dup ints from slice append function "evaluated but not used" 【发布时间】:2019-03-18 17:14:21 【问题描述】:

我无法运行这个 Go 语言测试程序。编译器在下面的 append() 函数调用中不断给出错误,并出现“已评估但未使用”错误。我不知道为什么。

package main

import (
    "fmt"
)

func removeDuplicates(testArr *[]int) int 

    prevValue := (*testArr)[0]
    for curIndex := 1; curIndex < len((*testArr)); curIndex++ 
        curValue := (*testArr)[curIndex]
        if curValue == prevValue 
            append((*testArr)[:curIndex], (*testArr)[curIndex+1:]...)
        
        prevValue = curValue
    
    return len(*testArr)


func main() 
    testArr := []int0, 0, 1, 1, 1, 2, 2, 3, 3, 4

    nonDupSize := removeDuplicates(&testArr)

    fmt.Printf("nonDupSize = %d", nonDupSize)

【问题讨论】:

好吧,因为你没有使用 append 的返回值。 Append 可能会返回一个新切片,因此您必须分配返回值。 tour.golang.org/moretypes/15 是的,修复了编译错误,下一个问题是这会分配一个新切片吗? append documentation 回答您的下一个问题。 另见blog.golang.org/go-slices-usage-and-internals 【参考方案1】:

"evaluated but not used" error.

下面的代码是我的想法。我觉得你的代码不是很清楚。

package main

import (
    "fmt"
)

func removeDuplicates(testArr *[]int) int 
    m := make(map[int]bool)
    arr := make([]int, 0)

    for curIndex := 0; curIndex < len((*testArr)); curIndex++ 
        curValue := (*testArr)[curIndex]
        if has :=m[curValue]; !has 
            m[curValue] = true
            arr = append(arr, curValue)
        
    
    *testArr = arr
    return len(*testArr)


func main() 
    testArr := []int0, 0, 1, 1, 1, 2, 2, 3, 3, 4

    nonDupSize := removeDuplicates(&testArr)

    fmt.Printf("nonDupSize = %d", nonDupSize)

【讨论】:

【参考方案2】:

彼得的回答是肯定的,编译错误是由于没有从 append() 中获取返回值

【讨论】:

以上是关于Golang 从切片追加函数“已评估但未使用”中删除 dup ints的主要内容,如果未能解决你的问题,请参考以下文章

Golang 切片追加

golang 自定义切片追加方法

golang 将两个切片追加在一起

奇怪的golang“追加”行为(覆盖切片中的值)

golang数组与切片

golang——常用内建函数