go 下怎么实现类似__weak 功能?

120 天前
 afxcn

stm32 开发中经常能见到这样的函数:

_weak void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(huart);

  /* NOTE : This function should not be modified, when the callback is needed,
            the HAL_UART_AbortReceiveCpltCallback can be implemented in the user file.
   */
}

我只需要随便在一个地方重写这个函数,它最终调用的就是我的函数:

void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart)
{
  //做一些爱做的事情
}

如果我只想定义些简单的函数,用户可以在自己喜欢的地方重写它,go 中怎么实现类似的功能,或者 go 中有更好的实现?

2019 次点击
所在节点    Go 编程语言
6 条回复
k9982874
120 天前
没有,go 没有函数重载,用 interface
pagxir
120 天前
这个是连接器跟装载器的特性,如果会写 ld 脚本,理论可以实现
kumoocat
120 天前
povsister
120 天前
go 不需要这种花里胡哨的写法。
binary 分发:cgo 走动态链接
源代码分发:走 build constraint ,你提供一个基础版本的实现,让用户自己写个源代码函数实现,然后 build flag 就可以了
Maboroshii
120 天前
interface 或者传一个函数指针也能实现相同的功能吧,门槛也低
afxcn
104 天前
好像用 go 实现这个没什么意义,但这思路用在代码生成上倒是很不错。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1067654

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX