文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

去吧,如果我用仅类型接收器声明一个函数,如何调用它?

2024-04-05 00:01

关注

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天编程网给大家整理了《去吧,如果我用仅类型接收器声明一个函数,如何调用它?》,聊聊,我们一起来看看吧!

问题内容

只是好奇,如果我仅使用类型接收器声明它,如何调用下面的 go func func (t) test() ,它是否有效?例如:https://play.golang.org/p/k8qukaczdun

package main

import (
    "fmt"
)

type t int

func (t) test() {
    fmt.println(233)
}

func main() {
    fmt.println(666666)
}

我尝试构建并运行它,看起来不错......但是:

  1. 这个 func (t) test() 到底是什么以及如何调用它?
  2. 这种声明有任何有意义的用例吗(我的意思是裸类型作为接收者)?

更多背景:

我被触发去思考这个问题,因为我想找到一种惯用/优雅的方式将枚举(iota)的所有值公开给外部包,目前我正在做类似的事情:https://play.golang.org /p/id0aq_mn2sj

package main

import (
    "fmt"
)

type Gender int

const (
    Male Gender = iota + 1
    Female
)

func (g Gender) All() [2]string {
    return [...]string{"MALE", "FEMALE"}
}

func main() {
    fmt.Println("All gender types:", Gender(0).All())
}

它有效,因此任何 gender 实例都可以调用其 all 函数来获取所有 gender 类型,但感觉有点奇怪,所以我开始考虑 是否可以仅在该类型上注册一个 func,不是实例,所以我可以这样做:package.gender.all(),在go中可能吗?

顺便说一句,没有全局变量。


正确答案


如您的示例所示,是的。

这是一个正常的方法。您可以像普通方法一样调用它。请参阅:

var val t
val.test()

这种形式的方法的主要区别是您无法访问接收器(因为它未命名)。所以它实际上类似于 "static" method(尽管实际上不是。您仍然需要一个实例来调用它)

如果您想获取枚举的所有值,则没有理由将其设为类型方法。它所做的只是创建一个额外的步骤来调用它:

var g Gender // create a useless variable so we can call the method
g.All() // actually call the method

你不妨为它创建一个常规函数。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《去吧,如果我用仅类型接收器声明一个函数,如何调用它?》文章吧,也可关注编程网公众号了解相关技术文章。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯