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

afxcn · 2024-8-25 19:34:24 · 56 次点击
stm32 开发中经常能见到这样的函数:

```c
_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.
   */
}
```

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

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

如果我只想定义些简单的函数,用户可以在自己喜欢的地方重写它,go 中怎么实现类似的功能,或者 go 中有更好的实现?
举报· 56 次点击
登录 注册 站外分享
5 条回复  
Maboroshii 小成 2024-8-26 01:32:22
interface 或者传一个函数指针也能实现相同的功能吧,门槛也低
povsister 小成 2024-8-25 20:34:26
go 不需要这种花里胡哨的写法。
binary 分发:cgo 走动态链接
源代码分发:走 build constraint ,你提供一个基础版本的实现,让用户自己写个源代码函数实现,然后 build flag 就可以了
kumoocat 小成 2024-8-25 19:51:04
可以参考 sql.Register
https://pkg.go.dev/database/sql#Register
pagxir 小成 2024-8-25 19:44:21
这个是连接器跟装载器的特性,如果会写 ld 脚本,理论可以实现
k9982874 小成 2024-8-25 19:39:24
没有,go 没有函数重载,用 interface
返回顶部