
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 中有更好的实现?
1 k9982874 2024-08-25 19:39:24 +08:00 via Android 没有,go 没有函数重载,用 interface |
2 pagxir 2024-08-25 19:44:21 +08:00 via Android 这个是连接器跟装载器的特性,如果会写 ld 脚本,理论可以实现 |
3 kumoocat 2024-08-25 19:51:04 +08:00 可以参考 sql.Register https://pkg.go.dev/database/sql#Register |
4 povsister 2024-08-25 20:34:26 +08:00 go 不需要这种花里胡哨的写法。 binary 分发:cgo 走动态链接 源代码分发:走 build constraint ,你提供一个基础版本的实现,让用户自己写个源代码函数实现,然后 build flag 就可以了 |
5 Maboroshii 2024-08-26 01:32:22 +08:00 via Android interface 或者传一个函数指针也能实现相同的功能吧,门槛也低 |
6 afxcn OP 好像用 go 实现这个没什么意义,但这思路用在代码生成上倒是很不错。 |