0

今天在Golang中遇到了一个奇怪的错误,与这个问题相切。鉴于以下情况,

package main

import (
    "fmt"
)

func main() {
    fmt.Println("Hello, playground")
    data := []string{"A", "B", "C"}
    testFunc(data...)
}

func testFunc(items ...interface{}) {
    for i, item := range items {
        fmt.Printf("Item %d: %v\n", i, item)
    }
}

我收到一个错误,因为[]string无法转换为[]interface{}. 这是没有意义的,因为我可以做到testFunc("A", "B", "C")并且它会按预期工作。这告诉我省略号只是给定类型切片的掩码,因此,当我调用 时testFunc,编译器会将切片类型与可变参数预期的切片类型进行比较,如果它们不相等,返回错误。但是,当向可变参数发送字符串列表时,会改为对每个字符串进行类型检查interface{}。那么,我的问题是:为什么 Golang 对切片类型进行类型检查而不是按元素进行类型检查?

4

0 回答 0