当前位置: 首页 > 面试题库 >

没有身体的功能是什么意思?

顾高扬
2023-03-14
问题内容

我正在阅读该package的代码,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的作者这样写

谢谢!


问题答案:

1)函数定义在这里:

// 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)函数声明:

函数声明可以省略主体。这样的声明为Go外部实现的功能(例如汇编例程)提供了签名。

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



 类似资料:
  • 问题内容: 当查看该方法的源代码时,我发现以下语法:存在没有主体的导出函数签名,以及包含实现的同一签名的非导出版本: 我认为这是一些语法,可让您轻松导出本地函数。那是对的吗?为什么不这样做而不仅仅是拥有一个导出函数并在包中使用它呢? 问题答案: 根据Go语言规范。 函数声明可以省略主体。这样的声明为Go外部实现的功能(例如汇编例程)提供了签名。 在这种情况下,该功能由386中的体系结构特定的汇编文

  • 在Kotlin中,标题和正文都是可选的;如果类没有正文,则可以省略大括号。 所以我们可以像这样定义类, 这种类型的课有什么用?

  • 问题内容: 我不明白为什么Python没有功能。它有一个内置的(我认为是姐姐),但没有。 在python 2.6中甚至有一个函数(在math中),但是没有符号。当您可以只写一个然后直接从中获取时,为什么还要写一个?后者会更清楚:x带有y的符号,而带copysign的则必须记住它是x带有y的符号还是y带有x的符号! 显然,除了,它不提供任何其他功能,但是它也将更具可读性(对于像python这样的高度

  • 我偶然发现了这个代码。我一直在使用{}格式的箭头函数,这个()包装器是什么意思?

  • 问题内容: 我们经常看到如下: 有什么功能? 问题答案: DOCTYPE的最主要用途是在Quirks模式和Standards模式渲染之间切换浏览器。 出现此功能的原因是IE的旧版本中的“残破”渲染。人们认识到,如果Microsoft仅“修复”了IE呈现引擎,则许多现有站点将无法正确呈现。因此,它的工作方式是,如果您在页面中完全放置了_任何_有效的DOCTYPE声明,则假定您知道自己在做什么,并且浏