相关疑难解决方法(0)

interface {}的含义是什么?

我是接口的新手,并试图通过github做SOAP请求

我不明白的意思

Msg interface{}
Run Code Online (Sandbox Code Playgroud)

在这段代码中:

type Envelope struct {
    Body `xml:"soap:"`
}

type Body struct {
    Msg interface{}
}
Run Code Online (Sandbox Code Playgroud)

我观察到相同的语法

fmt.Println
Run Code Online (Sandbox Code Playgroud)

但不明白所取得的成就

interface{}
Run Code Online (Sandbox Code Playgroud)

go

122
推荐指数
5
解决办法
4万
查看次数

无法将[]字符串转换为[] 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万
查看次数

无法在 js 函数调用的 go 函数中返回数组。恐慌:ValueOf:无效值

有一个gocode,编译成wasm文件。我希望其中一个函数返回一个数组,但是当我这样做时,我看到一个panic: ValueOf: invalid value错误。js.ValueOf函数似乎能够处理数组:

...
case []interface{}:
    a := arrayConstructor.New(len(x))
    for i, s := range x {
        a.SetIndex(i, s)
    }
    return a
...
Run Code Online (Sandbox Code Playgroud)

但当我给它一个值时仍然会恐慌[]int

package main

import (
    "fmt"
    "syscall/js"
)

var signal = make(chan int)

func keepAlive() {
    for {
        <-signal
    }
}

func main() {
    js.Global().Set("PanicStation", js.FuncOf(PanicStation))
    keepAlive()
}

func PanicStation(this js.Value, args []js.Value) interface{} {
    arr := make([]int, 1)
    return arr
}
Run Code Online (Sandbox Code Playgroud)

arrays go slice webassembly

5
推荐指数
1
解决办法
2046
查看次数

将结构切片转换为空接口切片

我正在尝试将一片结构分配给一个切片[]interface{}(传递到AppEngine中datastore.PutMulti.但是,这会导致编译错误,因为这两种类型显然是不兼容的:
cannot use type[]*MyStruct as type []interface { } in assignment

基本上我有:

var src []*MyStruct
var dest []interface{}
…
dest = src  // This line fails.
Run Code Online (Sandbox Code Playgroud)

有没有反复复制srcdest每个元素一次一个?

google-app-engine go

4
推荐指数
1
解决办法
517
查看次数

append()中的"..."表示法不适用于附加不同类型的切片

我需要一个包含多种类型的抽象切片.最简化的代码是:

package main

import "fmt"

type A interface{}

type X string

func main() {
    sliceA := make([]A, 0, 0)
    sliceX := []X{"x1", "x2"}
    var appendedSlice []A
    appendedSlice = append(sliceA, sliceX[0], sliceX[1])  // (1) works
    appendedSlice = append(sliceA, sliceX...)             // (2) doesn't work
    fmt.Println(appendedSlice)

}
Run Code Online (Sandbox Code Playgroud)

在我的真实程序中,接口A定义了一些函数,X和其他类型实现了它.

第(2)行引发错误cannot use sliceX (type []X) as type []A in append.

我认为(2)是(1)的语法糖,但我可能遗漏了一些东西......我是否必须一个一个地将一个元素X添加到切片A中?

提前谢谢你们!

go

0
推荐指数
1
解决办法
87
查看次数