请问:go install 后,pkg文件夹多出了 *.a文件,然后是否可以直接引用包?
例如:
pkg 中已经有了 \windows_amd64\go-mssqldb.a ,然后我在调用这个包的go文件中 import 包
```go
import(
_ "go-mssqldb"
)
```
,但是还是提示
:cannot find package "go-mssqldb" in any of:
/usr/local/go/src/go-mssqldb (from $GOROOT)<br>
/usr/local/go/bin/src/go-mssqldb (from $GOPATH)<br>
/home/wliu/workspace/GolangSocketServer/src/go-mssqldb
使用 go install 后还为什么还需要保留 src下的go源文件?必须的吗?如果是 go install的作用是什么?
我在项目中已经有了 go-mssqldb.a 的引用了啊。
源码必须存在。
有一种解决方案,当然比较麻烦:
将要发布的闭源包.a文件放到 $GOROOT/pkg/$GOOS_$GOARCH/ 目录中.
再将发布包的源码保留只有包声明的源文件放到 $GOROOT/src/pkg/ 目录中.
操作如下:
*发布方法*:
例如有say包要发布:
```go
$cd $GOPATH/src/say
$cat say.go
// say something package
package say
import "fmt"
// private function
func say(str string){
fmt.Println(str)
}
// Say hi
func Hi(){
say("Hi......")
}
// Say hello to someone
func Hello(me string){
say("Hello" + me)
}
```
首先编译生成say包的.a文件(如果要发布到多种系统架构,需要修改编译参数交叉编译出多种发布文件)
$go install
$ls $GOPATH/pkg/$GOOS_$GOARCH/say.a
其次修改发布包对应的源文件(两种方式任选)
最简单的修改方式
$echo 'package say' > say.go
保留导出的接口与API注释供查看使用
```go
$cat > say.go <<EOF
// say something package
package say
// Say hi
func Hi(){}
// Say hello to someone
func Hello(me string){}
EOF
```
最后发布方提供两份文件:
编译生成say包的.a文件和修改之后的源文件
say.a
say.go
#1