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
。
参考: