相关疑难解决方法(0)

无法将[]字符串转换为[] interface {}

我正在编写一些代码,我需要它来捕获参数并传递它们fmt.Println
(我希望它的默认行为,写入由空格分隔的参数,然后是换行符).但它需要[]interface {}flag.Args()返回一个[]string.
这是代码示例:

package main

import (
    "fmt"
    "flag"
)

func main() {
    flag.Parse()
    fmt.Println(flag.Args()...)
}
Run Code Online (Sandbox Code Playgroud)

这将返回以下错误:

./example.go:10: cannot use args (type []string) as type []interface {} in function argument
Run Code Online (Sandbox Code Playgroud)

这是一个错误吗?不应该fmt.Println采取任何阵列?顺便说一句,我也试过这样做:

var args = []interface{}(flag.Args())
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

cannot convert flag.Args() (type []string) to type []interface {}
Run Code Online (Sandbox Code Playgroud)

是否有"Go"方式解决此问题?

type-conversion go

81
推荐指数
3
解决办法
4万
查看次数

golang:slice of slice!=它实现的接口切片?

我有一个接口Model,由struct实现Person.

要获取模型实例,我有以下帮助函数:

func newModel(c string) Model {
    switch c {
    case "person":
        return newPerson()
    }
    return nil
}

func newPerson() *Person {
    return &Person{}
}
Run Code Online (Sandbox Code Playgroud)

上面的方法允许我返回一个正确类型的Person实例(稍后可以使用相同的方法轻松添加新模型).

当我尝试做类似的事情来返回一片模型时,我得到一个错误.码:

func newModels(c string) []Model {
    switch c {
    case "person":
        return newPersons()
    }
    return nil
}

func newPersons() *[]Person {
    var models []Person
    return &models
}
Run Code Online (Sandbox Code Playgroud)

去投诉: cannot use newPersons() (type []Person) as type []Model in return argument

我的目标是回到请求任何机型的切片(是否[]Person,[]FutureModel,[]Terminator2000,W/E).我缺少什么,我该如何正确实施这样的解决方案?

go

55
推荐指数
3
解决办法
3万
查看次数

标签 统计

go ×2

type-conversion ×1