MIT 6.824 - Lab 1 (2): Go buildmode
Lab 1 中遇到的第一个命令是 go build -race -buildmode=plugin ../mrapps/wc.go,其中 -buildmode=plugin 表示以插件的形式打包源文件,这里的 wc.go 是用户实现的 map 和 reduce 方法,这体现了面向接口编程的思想,只要用户编写的 map 和 reduce 方法遵循统一的签名,则可以在不重新编译 MapReduce 框架代码的情况下,实时替换运行不同的用户应用。
假设有个 sum.go 文件,里面只有一个 Sum 方法:
| 1 | package main | 
对 sum.go 以插件形式编译:
| 1 | go build -buildmode=plugin sum.go | 
会生成一个 sum.so 文件。
接着,在 main.go 中就可以通过 plugin.Open 读取 sum.so:
| 1 | package main | 
然后通过 Lookup 根据方法名找到 Sum 方法,按照指定方法签名转换后即可进行调用。而如果需要换一个 Sum 的实现,则无需重新编译 main.go。
参考: