我尝试在go中编写一个小应用程序,从标准输入中获取'x'个整数,计算均值并将其返回.我到目前为止:
func main() {
var elems, mean int
sum := 0
fmt.Print("Number of elements? ")
fmt.Scan(&elems)
var array = new([elems]int)
for i := 0; i < elems; i++ {
fmt.Printf("%d . Number? ", i+1)
fmt.Scan(&array[i])
sum += array[i];
}............
Run Code Online (Sandbox Code Playgroud)
在尝试编译时,我收到以下错误消息:
无效的数组绑定元素
这有什么不对?
Pao*_*lla 79
你应该使用一个切片:
//var array = new([elems]int) - no, arrays are not dynamic
var slice = make([]int,elems) // or slice := make([]int, elems)
Run Code Online (Sandbox Code Playgroud)
看" 切片使用和内部 "
// for i := 0; i < elems; i++ { - correct but less idiomatic
for i, v := range slice {
Run Code Online (Sandbox Code Playgroud)
小智 9
在我看来,这是因为对new和make函数的使用产生了混淆.这是Go语言的已知问题/功能,约了几次讨论证明newVS make在golang螺母.
之间的差异new,并make可以通过放手打印出所创造的价值的类型变得更加清晰new和make:
package main
import "fmt"
func main() {
fmt.Printf("%T %v\n", new([10]int), new([10]int))
fmt.Printf("%T %v\n", make([]int, 10), make([]int, 10))
}
Run Code Online (Sandbox Code Playgroud)
输出:
*[10]int &[0 0 0 0 0 0 0 0 0 0]
[]int [0 0 0 0 0 0 0 0 0 0]
Run Code Online (Sandbox Code Playgroud)
从类型可以看出,要访问数组元素,new([10]int)我们首先需要取消引用指针.
双方new并make需要转到类型作为其第一个参数.但是,表达式[elems]int是不 a转到类型(除非elems是一个围棋恒定,这是不这里的情况).
有关进一步参考,请参阅http://golang.org/doc/go_spec.html#Allocation和http://golang.org/doc/go_spec.html#The_zero_value.
为了更好地理解的结果是否new是可用的,它可能有助于查找是否len和cap零(零)值工作:http://golang.org/doc/go_spec.html#Length_and_capacity
| 归档时间: |
|
| 查看次数: |
50207 次 |
| 最近记录: |