前面写的一篇 Go 调用 C 写的动态库完整例子(Linux版),是在告诉编译器用 /* #cgo ...*/ 的方式去加载动态库 libadd.so
,这让代码丧失了一定的灵活性,比如同样的函数由多个动态库提供了不同的实现。这就需要做到在 Go 程序中可根据不同的输入条件选择不同的动态库实现,大概是
if 条件1 {
loadLibrary("libadd1.so")
调用其中的实现函数 add
else if 条件 2 {
loadLibrary("libadd2.so")
调用其中的实现函数 add
else {
loadLibrary("libaddx.so")
调用其中的实现函数 add
当然上面那样写是不行的,首先每一个动态库应该在程序运行期间只加载一次,定位的函数应该要缓存起来复用。 阅读全文 >>