Arrays 在go错误中使用切片和数组

Arrays 在go错误中使用切片和数组,arrays,go,Arrays,Go,我正在学习go,并且我已经习惯了使用Java,所以我遇到了一些错误,而在我看来这并不是一个问题。这是我的密码: package main import( "fmt" ) func main(){ f:= [5]int{1,2,3,4,5} h:= [5]int{6,7,8,9,10} fmt.Println(reverseReverse(f,h)) } func reverseReverse(first []int, second []int) ([]int

我正在学习go,并且我已经习惯了使用Java,所以我遇到了一些错误,而在我看来这并不是一个问题。这是我的密码:

package main
import(
    "fmt"
)

func main(){
    f:= [5]int{1,2,3,4,5}
    h:= [5]int{6,7,8,9,10}

    fmt.Println(reverseReverse(f,h))

}
func reverseReverse(first []int, second []int) ([]int, []int){
    //creating temp arrays to hold the traversed arrays before swapping.
    var tempArr1 []int
    var tempArr2 []int
    //count is used for counting up the tempArrays in the correct order in the For loops
    var count = 0
    //goes through the first array and sets the values starting from the end equal to the temp array
    //which increases normally from left to right.
    for i :=len(first)-1; i>=0;i--{
        tempArr1[count] = first[i]
        count++
    }
    count =0
    //same as first for loop just on the second array
    for i :=len(second)-1; i>=0;i--{
        tempArr2[count] = second[i]
        count++
    }
    //trying to replace the values of the param arrays to be equal to the temp arrays
    first=tempArr2
    second = tempArr1
    //returning the arrays
    return first,second
}
基本上,我正在尝试编写一个方法,该方法接受两个数组,并将它们反向和交换返回

例:

应返回:

arr1 = {8,7,6}

arr2 = {3,2,1}
我得到的错误如下:

src\main\goProject.go:35:无法将第一个(类型[5]int)用作类型[]int 作为交换论点

src\main\goProject.go:35:无法将第二个(类型[5]int)用作类型 []返回参数中的int

它说:不能在print语句中的变量上使用f(type[5]int)作为type[]int

我以前遇到过问题,将我的tempArray换成了片,但我不明白为什么会出现这个错误

旁注:我尝试将参数数组长度替换为。。。也没有运气:

func reverseReverse(first [...]int, second [...]int) ([]int, []int){
这产生了与之前相同的错误,只是说:

f (type [5]int) as type [...]int
所以我的问题是:为什么我会犯这个错误?这是所有的代码,我有意见,如果需要更多信息的任何问题

在这里:

在我将临时数组更改为切片之前,我有以下内容:

var tempArr1 [len(first)]int
var tempArr2 [len(second)]int
我仍然得到与前面所述相同的错误,但新的错误是:

src\main\goProject.go:15:非常量数组绑定len(第一个)

src\main\goProject.go:16:非常量数组绑定len(秒)

我知道它应该是常量,但为什么使用len()不能使其保持常量?

有两个问题:

  • 必须先制作一个长度为5的切片,然后才能访问其中的元素。如果只执行var tempArr1[]int,您会感到恐慌
  • 您可以使用片而不是数组,并且返回类型将与[]int匹配
您可以在此处找到解决方案:

编辑:为了使您能够将数据类型保持为数组,只需将返回类型更改为匹配即可。您的函数签名应如下所示:

func reverseReverse(first [5]int, second [5]int) ([5]int, [5]int)
在这里玩:

为了回答您的问题,您不能让函数接受任意大小的数组。您必须指定长度。Go for[]int和[5]int有根本区别。

两个问题:

  • 必须先制作一个长度为5的切片,然后才能访问其中的元素。如果只执行var tempArr1[]int,您会感到恐慌
  • 您可以使用片而不是数组,并且返回类型将与[]int匹配
您可以在此处找到解决方案:

编辑:为了使您能够将数据类型保持为数组,只需将返回类型更改为匹配即可。您的函数签名应如下所示:

func reverseReverse(first [5]int, second [5]int) ([5]int, [5]int)
在这里玩:



为了回答您的问题,您不能让函数接受任意大小的数组。您必须指定长度。对于[]int和[5]int,Go有一个根本的区别。

[]int
[5]int
是不同的类型。只需在整个过程中使用切片。您的错误与您发布的源代码不符,但清除数组将修复它们。@JimB我希望它使用数组,但当我使用所有数组时,我也会遇到错误,有没有办法使用所有数组?我将对其进行编辑,以显示没有拼接时的情况以及我得到的错误。我对其进行编辑,以显示拼接前的情况。如果可能的话,我想使用数组。我相信拼接也会起作用,但为了概念验证,我想使用数组。
(第一个[…]int,第二个[…]int)
是无效的语法,编译器会告诉您。您的参数是片,所以要么将其设置为数组,要么在整个过程中使用片。根据定义,常量在编译时是已知的
len()
是在运行时计算的,因此不能是常量。
[]int
[5]int
是不同的类型。只需在整个过程中使用切片。您的错误与您发布的源代码不符,但清除数组将修复它们。@JimB我希望它使用数组,但当我使用所有数组时,我也会遇到错误,有没有办法使用所有数组?我将对其进行编辑,以显示没有拼接时的情况以及我得到的错误。我对其进行编辑,以显示拼接前的情况。如果可能的话,我想使用数组。我相信拼接也会起作用,但为了概念验证,我想使用数组。
(第一个[…]int,第二个[…]int)
是无效的语法,编译器会告诉您。您的参数是片,所以要么将其设置为数组,要么在整个过程中使用片。根据定义,常量在编译时是已知的
len()
是在运行时计算的,因此不能是常量。您能看到我的编辑吗。我想尝试只使用阵列,并将其更改为拼接,以尝试解决使用所有阵列时出现的错误。是否可以对所有阵列执行此操作?请参阅编辑。如果我必须使用拼接,那么我就不只是好奇是否只能使用数组了。因此我理解,如果我不知道数组的大小,我就必须使用拼接,但是如果不指定长度,就无法将数组用作参数?同样,我习惯于java,在java中我可以说参数是数组[]数组的长度是固定的,切片的长度是可变的。您可以使用
myArray[:]
获取数组的切片
myArray
,该切片是数组中所有元素的切片。您可以在任何位置使用数组或切片,但如果使用数组,则必须指定长度。您可以查看我的编辑吗。我想尝试只使用阵列,并将其更改为拼接,以尝试解决使用所有阵列时出现的错误。是否可以对所有阵列执行此操作?请参阅编辑。如果我必须使用拼接,那么我就不只是好奇是否只能使用数组了。因此我理解,如果我不知道数组的大小,我就必须使用拼接,但是如果不指定长度,就无法将数组用作参数?同样,我习惯于java,在java中我可以说参数是数组[]不管我是谁