没有函数体的函数是什么意思?

2024-03-26

我正在阅读打包的代码time,然后我想知道如何func After(d Duration) <-chan Time作品。

我发现代码如下:

func After(d Duration) <-chan Time {
    return NewTimer(d).C
}

func NewTimer(d Duration) *Timer {
    c := make(chan Time, 1)
    t := &Timer{
        C: c,
        r: runtimeTimer{
            when: nano() + int64(d),
            f:    sendTime,
            arg:  c,
        },
    }
    startTimer(&t.r)
    return t
}

所以我找到了定义startTimer- 这个功能太奇怪了startTimer没有函数体。

func startTimer(*runtimeTimer)

我想知道:

  1. 真正的代码在哪里startTimer
  2. 为什么这里可以存在“抽象方法”
  3. 为什么Go的作者这样写

Thanks!


  1. 函数已定义here https://golang.org/src/runtime/time.go#L206:

    // startTimer adds t to the timer heap.
    //go:linkname startTimer time.startTimer
    func startTimer(t *timer) {
        if raceenabled {
            racerelease(unsafe.Pointer(t))
        }
        addtimer(t)
    }
    
  2. 函数声明 http://golang.org/ref/spec#Function_declarations:

    函数声明可以省略函数体。这样的声明提供了在 Go 外部实现的函数的签名,例如汇编例程。

  3. 并非每种编程语言都可以完全表达自己的运行时(例如,C 可以)。 Go 运行时和标准库的一部分是用 C 语言编写的,部分是用汇编语言编写的,而其他一些则是用 C 语言编写的。.goc,这是一个没有详细记录的 Go 和 C 的混合体。

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

没有函数体的函数是什么意思? 的相关文章

随机推荐

  • 如何使 Visual Studio 立即窗口提供纯字符串输出?

    如果我在 Immediate 中评估生成长而复杂的字符串的内容 则调试器会对 C 字符串转义中的所有内容进行编码 因此我最终会得到一团乱麻 n t等等 然后我必须手动修复整个文本 这在以下情况下尤其令人烦恼 n 因为大多数文本编辑器无法进行
  • TinyXML:将文档保存为 char * 或字符串

    我尝试使用 TinyXML 从内存中读取和保存 而不是仅读取文件并将其保存到磁盘 看来文档的解析函数可以加载一个char 但是当我完成后 我需要将文档保存到 char 中 有人知道这件事吗 编辑 打印和流媒体功能不是我想要的 它们以可视格式
  • 如何检查传递的迭代器是否是随机访问迭代器?

    我有以下代码 它执行一些迭代器算术 template
  • Damas-Hindley-Milner 类型推理算法实现

    我正在寻找有关知名人士的信息Damas Hindley Milner 算法 https en wikipedia org wiki Hindley E2 80 93Milner type system为函数式语言进行类型推断 尤其是有关实现
  • npm 错误!错误:EPERM:不允许操作,取消链接

    操作系统 Windows 10 npm 版本 6 9 0 节点版本 12 4 0 我正在开发一个博览会应用程序 我想在我的 expo 应用程序上安装所有软件包 npm install 但是 发生了错误 17254 error Operati
  • Firestore 查询成本

    在Firestore上 我有一个社交应用程序 它将每个用户存储为文档 并根据一定距离内的用户进行查询 例如 如果用户启动了该应用程序 并且 50 英里内有 1 000 个用户 那么我是否需要为下载附近所有配置文件的 1000 次读取付费 如
  • 为什么此批处理脚本中的 FOR /f 循环评估空行?

    我正在尝试编写一个批处理脚本 该脚本获取 除其他外 计算机拥有的所有磁盘驱动器的列表 基本代码如下所示 REM Build the list of disk drives to monitor SETLOCAL enabledelayede
  • 如何将自定义对象传递到不同片段中的列表?

    所以我有我的MainActivity其中有一个BottomNavigationView 其中有 3 个不同的选项卡 当我单击它们时 它们会将我重定向到 3 个不同的片段 In FragmentA我有一个RecyclerView对于项目 每个
  • Java 线程 Random.nextLong() 返回相同的数字

    我正在使用一个 OAuth 库 它调用 new Random nextLong 来生成随机数 但它在异步调用上生成相同的随机数 我已将其范围缩小到线程 Random nextLong 以便经常返回相同的确切数字 有谁知道这是否是 Java
  • 将 OpenPGP 签名添加到已签名的文档中? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我们想要实现一个需要多人对文档进行数字签名的工作流程 如果我自己的钥匙串中有多个秘密密钥 我可以做一些简单的事情 gpg sign u userid1
  • 函数不接受 1 个参数 C++

    我的代码有问题 因为我无法弄清楚为什么会收到错误 这是代码 using namespace std void presentValue bool stringChar bool stringVal double futureValConv
  • 如何在 Makefile.am 中指定我想要 C++0x?

    目前我的项目有以下简单的树 Makefile am configure ac README src main cpp src Makefile am bin 我正在尝试遵循以下教程 http www gnu org software aut
  • window.onload = init(); 和有什么区别和 window.onload = init;

    根据我收集的信息 前者将函数返回语句的实际值分配给 onload 属性 而后者分配实际函数 并将在窗口加载后运行 但我还是不确定 感谢任何可以详细说明的人 window onload init 将 onload 事件分配给任何returne
  • 如何在sparkR中创建一个新的DataFrame

    在sparkR中我有data作为数据框 我可以附加一个条目data像这样 newdata lt filter data data column 1 我怎样才能附加多个 假设我想附加向量中的所有元素list lt c 1 6 10 11 14
  • 唯一的表单令牌禁用用户的多任务处理

    如果我想保护我的网站和用户免受跨站伪造 CSRF 攻击 我可以生成一个唯一的令牌 token md5 time rand on 每一页有一个形式 令牌在隐藏的输入字段中提交echo
  • 在Excel 2007中,为什么拖动手动水平分页会导致之前的自动分页变为手动分页?

    在过去的几天里 我一直在编写一些 Excel 2007 VBA 代码 用于管理复杂工作表中的分页符 经过多次挫折后 我刚刚解决了一个让我发疯的 跳页符 问题 并且我做出了以下发现 这让我想到了一个问题 为什么 在分页视图中 使用鼠标拖动ma
  • 如何使用 C# 执行 powershell 脚本并设置执行策略?

    我尝试结合 stackoverflow 中的两个答案 first https stackoverflow com questions 527513 execute powershell script from c sharp with co
  • HMLocation 事件示例

    我正在我的 HMHome 中实现 HMLotinEvent 我正在尝试下面的代码 但我没有得到的一件事是我不知道如何执行功能 例如如果我离开家必须关闭所有灯 我没有找到任何与操作集相关的方法 如果我错了 请纠正我 要求 我想关闭所有配件 以
  • iPad3 高分辨率视网膜显示问题

    我正在使用 Xcode 4 2 iOS SDK 5 0 为 iPad3 Retina Display 开发一个应用程序 我正在使用以下代码片段来检测视网膜 高分辨率 显示 if UIScreen mainScreen respondsToS
  • 没有函数体的函数是什么意思?

    我正在阅读打包的代码time 然后我想知道如何func After d Duration lt chan Time作品 我发现代码如下 func After d Duration lt chan Time return NewTimer d