2 回答
TA贡献1828条经验 获得超13个赞
正如 LinearZoetrope 的回答所示,您可以这样做。当心你可以做坏事:
package main
import (
"fmt"
"unsafe"
)
func main() {
f1 := func(s string) {}
f2 := func(i int) int { return i + 1 }
pointers := []unsafe.Pointer{
unsafe.Pointer(&f1),
unsafe.Pointer(&f2),
}
f3 := (*func(int) bool)(pointers[1]) // note, not int
fmt.Println((*f3)(1))
}
TA贡献1826条经验 获得超6个赞
它似乎有效:
package main
import (
"fmt"
"unsafe"
"math"
)
func main() {
fn := print
faked := *(*func(float64))(unsafe.Pointer(&fn))
faked(1.0)
// For comparison
num := math.Float64bits(1.0)
print(num)
}
func print(a uint64) {
fmt.Println(a)
}
会打印
4607182418800017408
4607182418800017408
当然,您可能很清楚尝试这样做的潜在问题。
- 2 回答
- 0 关注
- 275 浏览
添加回答
举报