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

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(使用前将#替换为@)

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

  • 限制 FormFile 中的文件大小

    我让用户使用 FormFile 上传文件 我应该在什么时候检查文件大小是否太大 当我做 file header fileErr r FormFile file 文件对象已经创建 那么我是否已经产生了读取整个文件的成本 https golan
  • 正则表达式不匹配

    我正在尝试以下代码 d byte x01 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x80J x13 x80SQ x80L xe0 x80 x92 x80L x80H xe0 r regexp Must
  • 如何获取文件的 ctime、atime、mtime 并更改它们

    如何使用 Go 获取文件的 ctime mtime atime 并更改它们 在 Go 1 1 2 中 os Stat只能获取mtime os Chtimes 可以更改 mtime 和 atime 但不能更改 ctime Linux ctim
  • golang导入结构体指针

    好的 我有一个主包和一个 http 处理程序包 本质上我想做的是设置一个全局结构 这样我就可以随时调用该结构中的信息 我尝试的示例的基本概要如下 主包导入处理函数 主包调用handlerfunc Handlerfunc 将 http Res
  • runtime.LockOSThread 是否允许子 goroutine 在同一个操作系统线程中运行?

    我明白在 Go 中 runtime LockOSThread https golang org pkg runtime LockOSThread将一个 goroutine 绑定到一个操作系统线程 并且不允许其他 goroutine 在该线程
  • Go MSSQL 连接

    如何提供 MSSQL 连接 它说它始终与代码相关 即使信息不正确 也不会报错 package main import database sql fmt github com denisenkom go mssqldb log var ser
  • Go API 在 html 中显示 swagger api 规范 (json) (Swagger UI)

    我有一个服务于特定端口的应用程序 gorilla mux 我也有一个 json 文件形式的 swagger API 规范 是否有任何 go API 可以像 spring boot 一样从 JSON 文件生成 swagger UI 定义 我正
  • Go SQL查询不一致

    我在执行查询时遇到一些非常奇怪的不一致 并且想知道是否有人知道原因 想象一下我有一个定义如下的结构 type Result struct Afield string db A Bfield interface db B Cfield str
  • GO并发编程测试

    我试图确保我的并发程序不存在以下情况 僵局 livelock 饥饿 我找到了以下工具http blog golang org race detector http blog golang org race detector 我尝试编译并运行
  • 我们如何在 Golang 中组合多个错误字符串?

    我是 golang 新手 我的应用程序需要在循环中返回多个错误 稍后需要组合并作为单个错误字符串返回 我无法使用字符串函数来组合错误消息 在返回之前可以使用什么方法将这些错误合并为一个错误 package main import fmt s
  • 视频第一帧

    我正在创建一个单页应用程序 后端使用 Golang 前端使用 javascript 我想找到一种使用 Golang 获取视频第一帧的方法 首先 我将 mp4 视频文件上传到服务器 它保存在服务器上 有没有办法使用 Golang 获取该视频的
  • 按引用或按值扫描功能

    我有以下代码 statement SELECT id from source where mgmt 1 var exists string errUnique dr db QueryRow statement mgmt Scan exist
  • 投射回更专业的界面

    我正在用 Go 编写一个游戏 在 C 中 我将所有实体类存储在 BaseEntity 类的数组中 如果一个实体需要在世界中移动 那么它将是一个从 BaseEntity 派生的 PhysEntity 但添加了方法 我尝试模仿这是 go pac
  • 如何在C#中执行Go函数

    有没有办法从 C 执行 Go 函数 例如 对于 Python 我会使用 Ironpython 我知道我可以生成一个进程来执行 Go 脚本 但如果可能的话 我真的不想回退到这样的解决方案 Google 搜索没有显示任何内容 那么有什么方法可以
  • 在golang中获取TTFB(第一个字节的时间)值

    我正在尝试获取 TTFB 值和 Connect 值 c exec Command curl w Connect time connect TTFB time starttransfer Total time time total o dev
  • 如何在 Golang 中将 []byte XML 转换为 JSON 输出

    有没有办法在 Golang 中将 XML byte 转换为 JSON 输出 我有以下功能body is byte但我想在一些操作之后将此 XML 响应转换为 JSON 我试过了Unmarshal in xml打包没有成功 POST func
  • Go 无法推断赋值中的类型:“non-name on left side of :=”

    该片段按预期工作play golang org p VuCl OKMav http play golang org p VuCl OKMav i 10 next 11 prev i i next 然而这个几乎相同的片段给出了non name
  • 使用覆盖率信息测试 Go 中的 os.Exit 场景 (coveralls.io/Goveralls)

    这个问题 如何在 Go 中测试 os exit 场景 https stackoverflow com questions 26225513 how to test os exit scenarios in go 以及其中得票最高的答案 列出
  • 递归追加到切片不起作用

    我正在尝试学习 Go 但我不明白为什么递归调用堆栈末尾的这段代码返回一个空切片 有帮助吗 还tmp甚至似乎没有在调试器中注册 func main input 3 int 4 6 7 expected 6 7 4 6 7 4 6 4 7 fm
  • 如何在 Go 中从 stdin 解析无限 json 数组?

    我正在尝试编写一个 i3status 的小替代品 一个与 i3bar 兼容的小程序进行通信this http i3wm org docs i3bar protocol html协议 他们通过标准输入和标准输出交换消息 两个方向的流都是一个无

随机推荐

  • 如何在没有 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