Arrays 在go错误中使用切片和数组
我正在学习go,并且我已经习惯了使用Java,所以我遇到了一些错误,而在我看来这并不是一个问题。这是我的密码: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
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中我可以说参数是数组[]不管我是谁