pili-engineering / pili-sdk-go.v2

Pili Streaming Cloud Server-Side Library For Go, Version 2
MIT License
28 stars 19 forks source link

使用 go mod 时依赖关系错误。 #6

Open lyricat opened 4 years ago

lyricat commented 4 years ago

例如,开一个空项目,根据官网文档,写了一个简单代码:

package main

import (
  "github.com/pili-engineering/pili-sdk-go.v2/pili"
)

var (
  AccessKey = "..." // 替换成自己 Qiniu 账号的 AccessKey.
  SecretKey = "..." // 替换成自己 Qiniu 账号的 SecretKey.
  HubName   = "..."                                    // Hub 必须事先存在.
)

func InitStream() *pili.Client {
  mac := &pili.MAC{AccessKey, []byte(SecretKey)}
  client := pili.New(mac, nil)
  return client
}

func main() {
  InitStream()
}

然后它的 go.mod 为:

module test

go 1.12

require github.com/pili-engineering/pili-sdk-go.v2 v0.0.0-20190923072324-f424329f4f73

这时候 go build,会报错:

$ go build
go: finding github.com/pili-engineering/pili-sdk-go.v2 latest
build test: cannot load github.com/qiniu/x/bytes/seekable: module github.com/qiniu/x@latest found (v7.0.8+incompatible), but does not contain package github.com/qiniu/x/bytes/seekable

如果这时候你发工单,七牛技术支持会让你试试 go get github.com/qiniu/xgo get qiniupkg.com/x,然后让你在 go.mod 加如下代码:

require (
    qiniupkg.com/x v7.0.8+incompatible // indirect
    github.com/qiniu/x v7.0.8+incompatible // indirect
)

但是其实没什么用,依然会报相同的错。

lyricat commented 4 years ago

正确的解决方法是这样的,关键在于,得自己用 git 拉一下线上的版本,然后替换掉 go get 回来的版本:

把线上的版本弄下来:

$ cd ~$GOPATH/go/pkg/mod/github.com/qiniu/
$ git clone github.com/qiniu/x

然后用 git clone 的版本替换 go get 下来的版本

$ mv x@v7.0.8+incompatible x@v7.0.8+incompatible_
$ mv x x@v7.0.8+incompatible

然后回到项目 build 就可以了。