2
爲什麼這不是一個類型不匹配?爲什麼這個賦值不是類型不匹配?
來自:https://golang.org/ref/spec#Assignability
甲值x可分配給類型T的變量( 「x是分配給T」)在任何情況下: ... ...剪斷 X的V型和T具有相同的基礎類型,並且V或T中的至少一個不是指定類型。 ... snip ...
這是因爲N []的基礎類型是N [],它不是一個命名類型?
背後的理由是什麼?
package main
import "fmt"
type N []N
func main() {
n := make([]N, 1)
fmt.Printf("%T\n", n)
fmt.Printf("%T\n", n[0])
n[0] = n
//fmt.Println(n)
}
*Output:*
[]main.N
main.N
你知道這個規則背後的理由嗎?當然除了讓我困惑。 n:= make([] N,1) 到 n:= make(N,1) 爲什麼這仍然有效?我認爲製作需要一個切片,地圖或頻道。 這是一個有點偏離主題,但爲什麼以下不會出現越界錯誤。 make([] int,3)[3:] – VM7
@ VM7我認爲這是語言規範中的一個省略,它沒有說'make(N,1)'的作用。 –