我是接口的新手,并试图通过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) 我正在编写一些代码,我需要它来捕获参数并传递它们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"方式解决此问题?
有一个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) 我正在尝试将一片结构分配给一个切片[]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)
有没有反复复制src到dest每个元素一次一个?
我需要一个包含多种类型的抽象切片.最简化的代码是:
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中?
提前谢谢你们!