返回顶部
首页 > 资讯 > 后端开发 > GO >去吧,如果我用仅类型接收器声明一个函数,如何调用它?
  • 701
分享到

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

2024-04-05 00:04:54 701人浏览 独家记忆
摘要

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

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

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

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

您可能感兴趣的文档:

--结束END--

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

本文链接: https://lsjlt.com/news/596484.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作