登录
首页 >  Golang >  Go问答

为什么我的数组声明没有按预期工作?

来源:stackoverflow

时间:2024-03-16 15:27:28 145浏览 收藏

在 Go 语言中,数组和切片是两种不同的数据结构,虽然在某些情况下它们可以互换使用,但它们在声明和使用方式上存在细微差别。数组具有固定大小,并且在编译时确定,而切片则是一种动态大小的数组,可以在运行时调整大小。本文将重点介绍切片的使用和内部机制,解释如何在 Go 代码中有效地使用切片。

问题内容

新手去这里。当我以这种方式声明数组时,为什么会出现编译时错误?

func countpositivessumnegatives(numbers []int) []int {
  
  // compile time error : cannot use result (type [2]int) as type []int in return argument
  var result [2]int 
  
  for _,number := range numbers {
    
    if (number > 0) {
      result[0] += 1
    } else {
      result[1] += number
    }
    
  }
  
  
  return result
  
}

如果我将代码更改为这种方式,它就可以工作,但我不确定为什么?

func CountPositivesSumNegatives(numbers []int) []int {
  
  
  result := []int{0,0}
  
  
  for _,number := range numbers {
    
    if (number > 0) {
      result[0] += 1
    } else {
      result[1] += number
    }
    
  }

  return result
  
}

正确答案


go 编译器在这里告诉你确切的错误: “编译时错误:无法在返回参数中使用结果(类型 [2]int)作为类型 []int” - 声明的返回类型和返回值的类型不匹配。

您的函数 countpositivesumnegatives() 返回类型声明为 []int (整数切片),但您返回的类型是 [2]int (2 元素整数数组)。

要修复第一个示例,您需要将返回类型更改为 [2]int

func CountPositivesSumNegatives(numbers []int) [2]int {

或者正如您发现的那样,您可以使结果成为整数切片。

要了解有关数组和切片以及它们之间差异的更多信息,我推荐这篇名为 Go Slices: usage and internals 的官方 go 博客文章

到这里,我们也就讲完了《为什么我的数组声明没有按预期工作?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

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