为什么详细说明的GO语言程序中的界面字段访问有效?

史密斯:

我在以下链接的代码中定义了2个接口{Main,Sub}和一个结构HumanStruct。我知道s1。(Main).Title()为何起作用,但是我想知道为什么m。(Sub).Name()起作用。这里的“ m”是接口Main类型的变量。该主界面没有字段“ Sub”。那怎么运作的呢?

package main

import "fmt"

type Main interface {
    Title() string
}

type Sub interface {
    Main
    Name() string
}

type HumanStruct struct {
    name  string
    title string
}

func (hs HumanStruct) Name() string {
    return hs.name
}

func (hs HumanStruct) Title() string {
    return hs.title
}

func main() {
    h := HumanStruct{name: "John", title: "Kings"}

    var m Main
    m = h

    var s1 Sub
    s1 = h

    fmt.Println("From main: ", m.(Sub).Name())
    fmt.Println("From sub:  ", s1.(Main).Title())
}
松饼上衣:

类型断言表达式的结果m.(Sub)为类型Sub接口Sub有一个Name()可以调用方法。

mto 的类型断言Sub成功,因为in的m值为a HumanStruct并且该类型满足Sub接口。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么GLPK Solver在JuMP中不详细说明什么?

为什么我的setup.py详细说明没有显示在pypi上?

使Go http.Response详细说明所有参数

为什么此功能界面有效

在 django html 详细模板中,为什么 .all 有效,但 .all() 会出错?

递归-Powershell中的详细说明

有效Go if语句的说明

目录的详细说明

为什么我不能在界面中访问此字段?

什么机制可以在chisel3详细说明中显示组件ID

在Java中实现Singleton模式与Factory模式结合的最佳方法是什么?详细说明

为什么括号访问符号有效但点号无效?

为什么从损坏的JDialog中检索字段的这种方式有效?

有关如何在Wordpress / Timber中添加“ Twig_Extension_Debug”的详细说明

从哪里可以得到pytorch torchvison中模型的所有方法的详细说明?

在Go中为接口类型分配<nil>为什么有效?

为什么该程序在Python 2.7.6中有效,但在Python 3中无效?

详细说明使用3D数组的程序的输出?

为什么此递归程序有效?

需要有关ffmpeg colorchannelmixer的详细说明

有关使用NSOpenPanel的详细说明

RxJS CombineAll()详细说明

SPARK中的任务需要顺序详细说明

无法详细说明Verilog中的实例化模块

sum() 在 lambda 练习中需要详细说明

为什么访问类的私有变量与访问结构的变量一样有效?

为什么是0 C ++中的有效语句?

在C#中,为什么dictionary [0] ++有效?

为什么'\ 117'在Java中是有效的字符文字?