a文件是go install 產生的,目前無法反編譯獲得源碼,就算獲得難度也是極大
將a文件對外發布出去,其他人便可正常像引用官方包一樣引用它
如:我們寫了一個包,將其a文件交給客戶,不將源碼交給客戶,客戶便可像正常引用go官方包一樣正常引用第三方包
將要發布的閉源包.a文件放到 $GOROOT/pkg/linx_amd/ 目錄中.
再將發布包的源碼保留只有包聲明的源文件放到 $GOROOT/src/say/ 目錄中.
操作如下:
*發布方*:
例如有say包要發布:
1,
$cd $GOPATH/src/say
$cat say.go
// say something package
package say
import "fmt"
// private function
func say(){
fmt.Println("hello....world")
}
首先在say.go文件同級目錄下編譯生成say包的.a文件(如果要發布到多種系統架構,需要修改編譯參數交叉編譯出多種發布文件)
$go install
$ls $GOPATH/pkg/linux_amd/say.a(say.a文件會自動生成在$GOPATH/pkg/linux_amd中)
2,
其次修改發布包對應的源文件
最簡單的修改方式
$:echo 'package say' > say.go
3,
最后發布方提供兩份文件:
編譯生成say包的.a文件和修改之后的源文件
say.a
say.go
*使用方*:
1,復制say.a文件到$GOROOT/pkg/linux_amd/目錄中
2,復制say.go文件到$GOROOT/src/say/目錄中
然后就可以在自己的代碼中像使用官方標准庫一樣使用第三方閉源包了.