有几个看不明白的语法,希望大神能够解答

washduck · 2020-11-26 14:49:43 · 1515 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2020-11-26 14:49:43 的主题,其中的信息可能已经有所发展或是发生改变。

自学go语言,有一些语法看不懂,主要下面两个:

var _ api.FullNode = &FullNodeAPI{}
i, ok := typ.(invoke);

关于这两个语法,做过很多猜想,但始终不知道对不对,希望懂的大神能够解答下,谢谢


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1515 次点击  
加入收藏 微博
15 回复  |  直到 2020-11-30 12:58:20
zj4202
zj4202 · #1 · 4年之前

1.定义了一个匿名变量 2.类型断言,如果是invoke类型,ok为true,i为转换后的invoke类型,可点出内部变量

washduck
washduck · #2 · 4年之前
zj4202zj4202 #1 回复

1.定义了一个匿名变量 2.类型断言,如果是invoke类型,ok为true,i为转换后的invoke类型,可点出内部变量

1.定义一个匿名变量的同时,后面跟了一个赋值,FullNodeAPI{}这个类型,虽然复制给了匿名变量,但也同时改变了api.FullNode的类型,再原文中,api.FullNode是一个interface,go里面接口的集成是不是一般都通过这种方式的?

rwy-aha-QWQ
rwy-aha-QWQ · #3 · 4年之前
  1. 应该是在编译期间就判断是否实现了接口,没实现,编译出错
washduck
washduck · #4 · 4年之前
rwy-aha-QWQrwy-aha-QWQ #3 回复

1. 应该是在编译期间就判断是否实现了接口,没实现,编译出错

谢谢答疑

liangjisheng
liangjisheng · #5 · 4年之前

@washduck 老兄在看filecoin的代码了?

washduck
washduck · #6 · 4年之前
liangjishengliangjisheng #5 回复

@washduck 老兄在看filecoin的代码了?

不但在看,还做了好几个月项目了。go语言和rust都是现学现用,在语法不是很懂的情况下,靠依葫芦画瓢稀里糊涂的过去了,知道项目告一段落之后,才有时间回来补充基础。

yuantiancai
yuantiancai · #7 · 4年之前

为啥有分号呢?不是编译器会补上吗?

liangjisheng
liangjisheng · #8 · 4年之前
washduckwashduck #6 回复

#5楼 @liangjisheng 不但在看,还做了好几个月项目了。go语言和rust都是现学现用,在语法不是很懂的情况下,靠依葫芦画瓢稀里糊涂的过去了,知道项目告一段落之后,才有时间回来补充基础。

老哥牛逼

washduck
washduck · #9 · 4年之前
yuantiancaiyuantiancai #7 回复

为啥有分号呢?不是编译器会补上吗?

我也忘记了,哈哈

washduck
washduck · #10 · 4年之前
liangjishengliangjisheng #8 回复

#6楼 @washduck 老哥牛逼

疫情当下,为了保住工作,不会也得会啊,哈哈。

liangjisheng
liangjisheng · #11 · 4年之前
washduckwashduck #10 回复

#8楼 @liangjisheng 疫情当下,为了保住工作,不会也得会啊,哈哈。

老哥咋哪里高就了?

washduck
washduck · #12 · 4年之前

@liangjisheng 这是属于私人信息了,嘿嘿,关系好了在告诉你。

liangjisheng
liangjisheng · #13 · 4年之前
minwell
minwell · #14 · 4年之前

1、定义了一个匿名的变量,类型是api包的FullNode接口类型,FullNodeAPI对象需要实现FullNode接口

2、类型断言,ok为true的时候,i的类型才是invoke的类型。

使用方法一般是

if i, ok := typ.(invoke);ok{
    // 按照invoke类型处理i
    ...
}

另一个使用方式是:

    v := typ.(type)
    switch v{
       case type1:
        // 按照type1 类型处理v
        ...
    }
washduck
washduck · #15 · 4年之前

@minwell 谢谢大神指教。

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传