当我运行下面的代码片段时,它会引发错误
a.test未定义(类型interface {}是没有方法的接口)
看来类型开关没有生效。
package main
import (
"fmt"
)
type A struct {
a int
}
func(this *A) test(){
fmt.Println(this)
}
type B struct {
A
}
func main() {
var foo interface{}
foo = A{}
switch a := foo.(type){
case B, A:
a.test()
}
}
如果我将其更改为
switch a := foo.(type){
case A:
a.test()
}
没关系
这是规范(强调我的)定义的正常行为:
TypeSwitchGuard可以包含一个简短的变量声明。使用该格式时,将在每个子句中隐式块的开头声明变量。
在大小写正好列出一种类型的子句中,变量具有该类型。 否则,变量具有TypeSwitchGuard中表达式的类型。
因此,实际上,类型开关确实有效,但是变量a
保留type interface{}
。
你能解决这个问题的方法之一是断言的是foo
有方法test()
,这将是这个样子:
package main
import (
"fmt"
)
type A struct {
a int
}
func (this *A) test() {
fmt.Println(this)
}
type B struct {
A
}
type tester interface {
test()
}
func main() {
var foo interface{}
foo = &B{}
if a, ok := foo.(tester); ok {
fmt.Println("foo has test() method")
a.test()
}
}
问题内容: 我有一个XML文档。一些字段具有自定义格式。例: 我想将其导入如下结构: 有什么方法可以实现自定义解码器,它将行字符串拆分成行数组()? 可以将Lines字段设置为字符串类型,并在xml导入后进行拆分,但这似乎不是一个很好的解决方案。我有什么方法可以定义用于行分割的自定义解码器,并将其与xml解码器组合? 问题答案: 您可以通过定义符合接口的新类型来实现。因此,与其创建一个,而不是使用
我想从我的api发送一个响应,所有响应都有一个统一的结构 我希望数据能够成为不同的结构,而不仅仅是单个数据结构。我可以说我没有正确使用这种模式。完成这种事情的正确方法是什么?有没有办法让结构字段能够成为具有相同键的任何类型?
问题内容: 我尝试解析返回json对象的api。我的问题是,在以下示例中,某些键有时是字符串,有时是类似“ Value”键的对象: 我的结构看起来像这样: 我必须告诉我我完全迷路了(是的,我是个迅速的初学者),我找不到解决我问题的方法。我知道我必须使用自定义init,但我不知道如何。 问题答案: 你可以试试
通用类可以具有多个类型参数。 以下示例将展示上述概念。 例子 (Example) 使用您选择的任何编辑器创建以下Java程序。 GenericsTester.java package com.wenjiangs; public class GenericsTester { public static void main(String[] args) { Box<Integer,
问题内容: 我是Go语言的初学者。我可能认为多年以来其他语言都太传统了,但这就是我想在Go中做的事情。假设以下用例 我有接口I。此接口具有功能start()和stop() 有许多实现接口的结构。结构A,结构B,结构C 当应用程序启动时,我想在结构A,B和C上调用start() 同样,当应用程序终止时,我想在A,B,C结构上调用stop()。 我不想在代码中的任何地方硬编码结构A,B和C来调用启动/
本文向大家介绍Golang中的int类型和uint类型到底有多大?,包括了Golang中的int类型和uint类型到底有多大?的使用技巧和注意事项,需要的朋友参考一下 在开始之前,我们先来看看uint 与 int 的区别 上面是图,下面是源码: 引言 今天调试一个问题,发现一个我无法理解的情况: 把64位的数字赋值给uint,我理解uint是32位的,为啥可以编译通过?但是我接着又在 playgr