函数声明语法:函数名前括号内的内容

2024-01-10

很抱歉我无法在问题标题中提供更具体的信息,但我正在阅读一些内容Go https://golang.org/代码和我遇到了这种形式的函数声明:

func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    ...
}

from https://github.com/mattermost/platform/blob/master/api/context.go https://github.com/mattermost/platform/blob/master/api/context.go

func (s *GracefulServer) BlockingClose() bool {
    ...
}

from https://github.com/braintree/manners/blob/master/server.go https://github.com/braintree/manners/blob/master/server.go

什么是(h handler)(s *GracefulServer)括号之间是什么意思?考虑到括号之间的含义,整个函数声明意味着什么?

Edit

这不是重复的Go中的函数和方法有什么区别? https://stackoverflow.com/questions/8263546/whats-the-difference-of-functions-and-methods-in-google-go:我提出这个问题是因为我不知道函数名称之前括号中的内容是什么,而不是因为我想知道函数和方法之间有什么区别......如果我知道这个声明是一个方法,我就不会'我一开始就没有这个问题。如果有一天有人和我有同样的疑问,我不相信她会去寻找“golang方法”,因为她不知道情况是这样的。这就像想知道数学表达式之前的字母“sigma”意味着什么(不知道它意味着求和),而有人说它是求和与其他事物之间的区别的重复。

另外,这个问题的简短答案(“它是一个接收器”)并不是“函数和方法之间有什么区别”的答案。


这称为“接收器”。在第一种情况下(h handler)它是一个值类型,在第二个(s *GracefulServer)它是一个指针。 Go 中的工作方式可能与其他一些语言略有不同。然而,接收类型的工作方式或多或少类似于大多数面向对象编程中的类。这是你调用方法的地方,就像我放了一些方法一样A在某个班级内Person那么我需要一个类型的实例Person为了打电话A(假设它是一个实例方法而不是静态方法!)。

这里的一个问题是接收者像其他参数一样被推入调用堆栈,因此如果接收者是值类型,就像在这种情况下handler那么你将处理你所谓的方法的副本,其含义类似于h.Name = "Evan"返回调用范围后不会持续存在。因此,任何想要改变接收器状态的东西都需要使用指针或返回修改后的值(如果您正在寻找的话,可以提供更多不可变类型范例)。

这是规范中的相关部分;https://golang.org/ref/spec#Method_sets https://golang.org/ref/spec#Method_sets

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数声明语法:函数名前括号内的内容 的相关文章

  • 我想在后端验证来自 golang 前端的时区

    前端在注册期间发送时区以及其他用户详细信息 我需要在时区上放置一个验证器来进行 api 测试 时区数据的格式为 GMT 10 00 Hawaii GMT 08 00 Pacific Time US amp Canada 我所做的是定义数组中
  • Go中如何从json字符串中获取键值

    我想尝试从 Go 中的 JSON 获取键值 但我不确定如何操作 我已经能够使用 simplejson 读取 json 值 但是我无法找到如何获取键值 有人能指出我正确的方向和 或帮助我吗 谢谢你 您可以通过执行以下操作来获取 JSON 结构
  • 当涉及多个渠道时,select 如何工作?

    我发现在多个非缓冲通道上使用 select 时 例如 select case lt chana case lt chanb 即使两个通道都有数据 但在处理此选择时 case chana 和 case chanb 的跟注不平衡 package
  • 为什么奇数的切片容量与偶数的切片行为不同

    我注意到 当容量为奇数时 切片的容量会以不同的方式表现 更具体地说 当向切片添加元素时 切片的容量为doubled当原始容量为偶数时 但当原容量为奇数时 容量为增加一 然后加倍 例子 s make int 28 28 s append s
  • 如何在运行“go test”时排除或跳过特定目录[重复]

    这个问题在这里已经有答案了 go test go list grep v vendor coverprofile testCoverage txt 我正在使用上述命令来测试文件 但有 1 个名为 Store 的文件夹我想从测试中排除 怎样才
  • 鸭子在 Go 中打字

    我想写一个Join函数接受任意对象String 方法 package main import fmt strings type myint int func i myint String string return fmt Sprintf
  • 这两种方式哪一种是惯用的方式? time.Sleep() 还是自动收报机?

    我必须每分钟执行一些语句 我不确定我应该遵循以下哪一项 如果有人能解释内存和 CPU 方面的优缺点 那就太好了 时间 Sleep func main go func for time Sleep time Minute fmt Printl
  • GoLang ssh:尽管将其设置为 nil,但仍出现“必须指定 HosKeyCallback”错误

    我正在尝试使用 GoLang 连接到远程服务器 在客户端配置中 除了用户和密码之外 我将 HostKeyCallback 设置为 nil 以便它接受每个主机 config ssh ClientConfig User user HostKey
  • go中有memset的类似物吗?

    在 C 中 我可以使用某些值初始化数组memset https msdn microsoft com en us library aa246471 28v vs 60 29 aspx const int MAX 1000000 int is
  • 如何将 SQLite 数据库捆绑到 Go 二进制文件中?

    我尝试使用 go bindata 和 packr 但这些包没有显示如何将 SQLite 数据库文件打包到二进制文件中 我不需要以任何方式更新数据库 我只想在启动时从中读取数据 如何将 SQLite 数据库文件嵌入到 Go 二进制文件中 SQ
  • GOMAXPROCS 默认值是多少?

    不设置同名环境变量时是否保证GOMAXPROCS设置为1 此代码显示的值 package main import runtime fmt func getGOMAXPROCS int return runtime GOMAXPROCS 0
  • 如何使信号量超时

    Go 中的信号量是通过通道来实现的 一个例子是这样的 https sites google com site gopatterns concurrency semaphores https sites google com site gop
  • os.Mkdir 和 os.MkdirAll 权限

    我正在尝试在程序开始时创建一个日志文件 我需要检查是否 log如果不创建目录 则目录存在 然后继续创建日志文件 好吧 我尝试使用os Mkdir 也os MkdirAll 但无论我在第二个参数中输入什么值 我都会得到一个没有权限的锁定文件夹
  • 在 Visual Studio Code 中调试 Go 测试

    在我的 Windows 计算机上 我安装了 Visual Studio Code 要手动运行测试 我进入控制台到项目文件夹并输入 go test main test go 它工作完美 但我遇到一种情况 我需要调试我的测试以了解发生了什么 为
  • 如何从 JWT 令牌中提取声明

    我正在使用 dgrijalva jwt go 包 我想从令牌中提取有效负载 但找不到方法 示例 取自 https jwt io https jwt io 对于编码 eyJhbGciOiJIUZI1NiIsInR5cCI6IkpXVCJ9 e
  • 如何使用 GOPATH 的 Samba 服务器位置?

    我正在尝试将 GOPATH 设置为共享网络文件夹 当我进入 export GOPATH smb path to shared folder I get go GOPATH entry is relative must be absolute
  • 如何修复“缺少表的 FROM 子句条目”错误

    我正在尝试根据游戏 ID 获取平台名称 我有如下三个表 我正在尝试加入它们以获得所需的结果 Games Id 1 2 3 4 Game Platforms Id game id platform id 1 1 1 2 1 2 3 3 3
  • 为什么 gmail API 以纯文本形式发送 html 电子邮件?

    我正在尝试使用 gmail API 发送 html 电子邮件 但由于某些原因 它会随机以纯文本 文本形式发送电子邮件 谷歌似乎改变了我设置的内容类型标头 这有什么理由吗 电子邮件内容始终完全相同 正如我测试的那样 API 仍处于实验阶段吗
  • 在 Go to 函数中通过引用和值传递

    我对 Go 中通过引用和值传递有点困惑 我已经看到过对类型前面的 的解释 在类型名称前面 表示声明的变量将存储该类型的另一个变量的地址 而不是该类型的值 类型 这对我来说毫无意义 在Java中 如果我将数据库实例传递给函数 我会这样做 da
  • 单值上下文中的多值错误

    我在编译 GO 代码时遇到此错误 multiple value fmt Println in single value context 我正在尝试创建一个函数 该函数接受可变数量的整数并将每个变量打印在一行上 GO package main

随机推荐

  • 如何在没有 jQuery 的情况下在 Javascript 中链接选择器

    在尝试操纵外部站点的布局时 我经常被迫使用一系列选择器来定位我想要的特定元素 我第一次遇到这个问题时 有人向我提供了一个 jQuery 解决方案 并且很容易得到结果 我不想依赖 jQuery 并且想知道这在标准 Javascript 中是否
  • JavaScript,在公共方法中将私有函数作为字符串调用,而不使用 eval (揭示模式)

    我试图在揭示模式中调用一个私有函数 这是我的代码 var module function var privateMethod function val console log val var publicMethod function va
  • 如何在 SQL Server 中获取具有复合主键的表列表?

    如何创建一个查询 为我提供 SQL Server 中具有复合主键的表列表 也许使用 sys tables 或 information schema tables 或其他东西 你可以挖掘这些信息information schema table
  • PHP计数替换[重复]

    这个问题在这里已经有答案了 我有一些代码在 PHP 7 以下运行的服务器上运行良好 但在 PHP 7 上我收到一条警告 需要删除 我需要修复代码以消除警告 我不能只是隐藏警告 我的问题是 count 函数 这是我收到的警告及其所引用的一小段
  • 我可以在调试时仅“跳过”jQuery 代码吗?

    在单步执行使用 jQuery 的脚本时 我just想要测试代码I wrote 我不想进入 jQuery 文件 我不是在调试 jQuery 只是在调试我自己的文件 有什么方法可以告诉调试器不要进入 jQuery 文件吗 我使用 Visual
  • Windows 10 - 任务计划程序 - 未运行 (0x41303)

    我正在尝试在 Windows 10 中安排一项任务 在 登录时 事件中启动多个程序 但在多次尝试 错误后它不会运行 任务配置如下 常规 无论用户是否登录都运行 它提示凭据输入框 也尝试仅在用户登录时运行 以最高权限运行 在尝试过的情况下配置
  • 如何在当前Vue实例上添加方法或数据?

    我是新来的Vue js我正在摆弄它 有没有办法创建可重用的方法和数据 这是我想要实现的非常简单的代码 第1页 html div div
  • 从 Assembly.GetTypes() 获取的类型的排序

    我有一个要求 我需要获取以下类型 public class Class1 public class Class2 Class1 public class Class3 Class1 我可以致电Assembly GetTypes 在目标程序集
  • IGrouping 不包含以下定义

    我一直在这里查看其他线程以了解如何在 linq 中执行 GroupBy 我遵循对其他人有效的精确语法 但是它不起作用 这是查询 var results from p in pending group p by p ContactID int
  • 如何手动将 .dump() 文件的输出解析为文本小部件

    我如何手动将 dump 的输出从包含斜体和粗体文本的文本小部件解析到不同的文本小部件以将其及其文本格式加载 这是代码 如果有帮助的话 文本应该与文本格式一起保存 但是当文件打开时 文本格式消失了 from tkinter import fr
  • OutputCache 属性和 jQuery Ajax 不缓存

    我有一个像这样的简单 MVC3 控制器操作 HttpGet OutputCache Duration 1200 Location System Web UI OutputCacheLocation Server public string
  • C#:有关套接字编程(同步或异步)的问题

    我正在用 C 编写一个即时消息服务器用于学习目的 我的问题是我应该使用同步还是异步套接字来处理 IM 客户端 目标是处理尽可能多的客户 我不太确定 但据我所知 异步套接字的数据包不会按顺序到达 这意味着当您发送 2 条聊天消息并且存在延迟
  • 伊莎贝尔证明加法的交换律

    我试图证明 Isabelle HOL 中自定义的交换律add功能 我设法证明了关联性 但我坚持这一点 的定义add fun add nat nat nat where add 0 n n add Suc m n Suc add m n 关联
  • GORM 使用 hasMany 映射同一类的两个属性

    我有以下内容 class Match Team localTeam Team visitingTeam class Team static hasMany matches Match 抛出 加载插件管理器时出错 类 class myapp
  • 如何以编程方式/使用注释将代码节的语法突出显示设置为特定语言?

    我有一个 Laravel Blade 模板 blade php 其中包含纯 JavaScript 作为部分 稍后将其插入到通用包装器中 所以这个例子是 div Some HTML content div section js var a b
  • Android 广播到特定的第三方应用程序

    我开发了一个 Android 应用程序 它发送具有自定义权限的广播 public abstract void sendBroadcast Intent intent String receiverPermission 现在 任何具有广播接收
  • 在fortran中解析输入文件

    这是我前辈的延续thread https stackoverflow com questions 21409601 reading input file in fortran 我有一个来自不同代码的文件 我应该parse用作我的输入 其中的
  • 在mysql中选择不同的列字段和总和

    我有下表 topic id unique forum id forum views 1002 1885 5 1003 1893 2 1004 1885 3 1005 1892 6 我怎样才能得到这样的输出 具有上表中论坛总浏览量的唯一for
  • 计算一行中 NULL 的数量

    有没有办法获取指示行中 NULL 字段数量的列 这将在 SELECT 语句中 例如 Field1 Field2 Num Null NULL A 1 更新 我想要这个查询 这样我就可以根据给定书籍的附属销售数量进行排序 因此 无论是哪一个 拥
  • 函数声明语法:函数名前括号内的内容

    很抱歉我无法在问题标题中提供更具体的信息 但我正在阅读一些内容Go https golang org 代码和我遇到了这种形式的函数声明 func h handler ServeHTTP w http ResponseWriter r htt