登录
首页 >  Golang >  Go问答

无法将名称(字符串类型)用作 ...string 参数的字符串类型

来源:stackoverflow

时间:2024-02-19 10:54:23 137浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《无法将名称(字符串类型)用作 ...string 参数的字符串类型》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

我在编译这段代码时遇到了这个问题:

./greet.go:11:29: cannot use name (type []string) as type string in argument to checkstringsareuppercase

但我不明白为什么。 name ...stringwords ...string 具有完全相同的类型。这是怎么回事?

func Greet(name ...string) string {
        helloWord := "Hello"
    
        if CheckStringsAreUppercase(name) {
            return strings.ToUpper(helloWord)
        }
    
        return helloWord
    }
    
    func CheckStringsAreUppercase(words ...string) bool {
        for _, word := range words {
            if !CheckStringIsUppercase(word) {
                return true
            }
        }
    
        return true
    }

正确答案


... 表示法(在函数签名中)表示可变参数,在该函数作用域内,该参数相当于该类型的切片,因此 ...string 相当于 []string

当您将 n 个参数传递给可变参数函数时,所有这些参数都必须可分配给可变参数的 t 类型。

因此,通过将参数作为 checkstringsareuppercase(name) 传递,name 的类型实际上是 []string,但 []string 不可分配给可变参数 zqbczq 的类型 string b. ..string,因此您的编译器错误。

将切片“分解”为可变参数的正确方法是在变量名称后使用三个点 ...checkstringsareuppercase(name...)

使用此语法:

if CheckStringsAreUppercase(name...) {
            return strings.ToUpper(helloWord)
        }

以上就是《无法将名称(字符串类型)用作 ...string 参数的字符串类型》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>