小编ifn*_*tak的帖子

如何设置 GOPRIVATE 环境变量

我开始研究一个Go项目,它使用 Github 私有存储库中的一些私有模块,每当我尝试运行go run main.go它时,都会出现以下410 Gone错误:

验证 github.com/repoURL/go-proto@v2.86.0+incompatible/go.mod:github.com/repoURL/go-proto@v2.86.0+incompatible/go.mod:阅读https://sum.golang。 org/lookup/github.com/!repoURL/go-proto@v2.86.0+incompatible : 410 Gone

我可以轻松地从终端克隆私有 repo,这意味着我的ssh密钥配置正确。我在这里读到我需要设置GOPRIVATE环境变量,但我不知道该怎么做。

任何人都可以回答或指向相关教程吗?

转到: v1.13,操作系统: macOS Mojave

environment-variables go go-modules

52
推荐指数
3
解决办法
5万
查看次数

golang中的模块缓存在哪里?

当我启用gomodules并构建我的go程序时,将下载所需的包.

但我可以在$ GOPATH/src /或$ GOPATH/src/mod中找到它们.

它们存放在哪里?

export GO111MODULE=on
go mod init
go build main.go 
go: finding github.com/sirupsen/logrus v1.0.6
go: downloading github.com/sirupsen/logrus v1.0.6
...
Run Code Online (Sandbox Code Playgroud)

go vgo

21
推荐指数
5
解决办法
7864
查看次数

如何从Google OpenID Connect获取ID_token的示例

我正在尝试从OpenID获取用户信息

https://developers.google.com/identity/protocols/OpenIDConnect#exchangecode

我收到来自的令牌响应:

tok, err := bookshelf.OAuthConfig.Exchange(context.Background(), code)
Run Code Online (Sandbox Code Playgroud)

我可以检查tok并看到有一个id_token元素:

log.Printf("************ tok  contains %#v", tok)

2019/05/13 15:11:24 ************ tok  contains &oauth2.Token{AccessToken:"XXXXXXXXXXX", TokenType:"Bearer", RefreshToken:"", Expiry:time.Time{wall:0xbf2f2c6b181f7b0f, ext:3608126524112, loc:(*time.Location)(0x18516e0)}, raw:map[string]interface {}{"scope":"openid https://www.googleapis.com/auth/profile.emails.read", "token_type":"Bearer", "id_token":"Base64-encodedJSONobject", "access_token":"HASH", "expires_in":3600}}
Run Code Online (Sandbox Code Playgroud)

我不明白如何从中提取索赔id_token。在哪里可以找到从JWT获取有效负载的示例id_token

当我尝试解码 id_token

id_token := base64.StdEncoding.DecodeString(tok.id_token)
Run Code Online (Sandbox Code Playgroud)

我得到这些错误:

multiple-value base64.StdEncoding.DecodeString() in single-value context

/var/folders/mw/0y88j8_54bjc93d_lg3120qw0000gp/T/tmpbPyjTZappengine-go-bin/auth.go:133:49: tok.id_token undefined (type *oauth2.Token has no field or method id_token)
Run Code Online (Sandbox Code Playgroud)

如何使用OpenID(而不是Google+)实现与下面的fetchProfile函数等效的功能?

我只能找到不推荐使用的Google+库:

func oauthCallbackHandler(w http.ResponseWriter, r *http.Request) *appError {
    oauthFlowSession, err := bookshelf.SessionStore.Get(r, r.FormValue("state"))
    if …
Run Code Online (Sandbox Code Playgroud)

go google-oauth openid-connect

11
推荐指数
1
解决办法
270
查看次数

go.mod 中的模块名称别名

有没有办法在模块中使用较短的名称表示/映射?

我有一个项目,其 url 命名为:

module github.com/<org>/<project>    
go 1.14
Run Code Online (Sandbox Code Playgroud)

如果能够做到这一点就太好了:

import "<short_name>/<project>/package_folder"
Run Code Online (Sandbox Code Playgroud)

来自 a go.mod,类似:

module github.com/<org>/<project> => short_name
go 1.14
Run Code Online (Sandbox Code Playgroud)

go go-modules

8
推荐指数
1
解决办法
7973
查看次数

Go 模块替换为本地模块的特定版本

我有一个go.mod如下所示的文件:

module someName

go 1.13

require (
    .
    .
    golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4
    localpackage v0.0.0
)

replace localpackage => ../localpackage
Run Code Online (Sandbox Code Playgroud)

这正如预期的那样工作!我不明白的是如何添加某个版本或向replace指令提交哈希!

例如:

replace localpackage => ../localpackage v1.0.0
Run Code Online (Sandbox Code Playgroud)

或者

replace localpackage => ../localpackage v0.0.0-20190731182444-35453ccff3d6
Run Code Online (Sandbox Code Playgroud)

这样做会导致错误:

替换模块目录路径“../localpackage”不能有版本

该错误非常明显,我不应该将版本添加到本地替换中。我检查了维基但找不到答案!

问题:

是否可以添加这种replacement以及如何添加?我在这里缺少什么?

go go-modules

5
推荐指数
1
解决办法
7322
查看次数

go中的楼层划分

我正在将一些旧的内容从 Python 翻译成 Go。在此代码中,我在 Python 中使用了向下取整除法和向下取整运算符。

d = b // c
# (c isn't a comment, I use the // operator from python)
Run Code Online (Sandbox Code Playgroud)

我的问题是,Go 中不存在这个运算符。在 Go 中翻译最简单的方法是什么?

python math go

5
推荐指数
1
解决办法
6540
查看次数

如何在 golang 中为我的测试用例正确创建模拟 http.request?

我想编写一个测试用例来验证我的参数解析器功能。以下是我模拟 http.request 的示例代码

rawUrl := "http://localhost/search/content?query=test"

func createSearchRequest(rawUrl string) SearchRequest {
    api := NewWebService()

    req, err := http.NewRequest("POST", rawUrl, nil)
    if err != nil {
        logger.Fatal(err)
    }
    logger.Infof("%v", req)
    return api.searchRequest(req)
}
Run Code Online (Sandbox Code Playgroud)

我的网络服务器使用github.com/gorilla/mux作为路由

router := mux.NewRouter()

router.HandleFunc("/search/{query_type}", searchApiService.Search).Methods("GET")

Run Code Online (Sandbox Code Playgroud)

但在我的测试用例中我无法{query_type}从模拟中得到http.request

func (api WebService) searchRequest(req *http.Request){
    // skip ....

    vars := mux.Vars(req)
    queryType := vars["query_type"]
    logger.Infof("queryType:%v", queryType)

    //skip ....
}
Run Code Online (Sandbox Code Playgroud)

如何在我的测试用例中获取 mux 的路径参数?

routes go

4
推荐指数
1
解决办法
3335
查看次数

如何在 Go-Gorm 中禁用默认错误记录器

我在 MySQL 中使用 GORM,我遇到并处理了错误Error 1062: Duplicate entry。问题是它仍然打印到控制台。

代码gym/models/auth.go:49

func AddAuth(username, password string) error {
    passwordHash, err := auth.HashPassword(password, argon2Conf)
    if err != nil {
        return err
    }
    userAuth := Auth{
        Username: username,
        Password: passwordHash,
    }
    return db.Create(&userAuth).Error
}
Run Code Online (Sandbox Code Playgroud)

我正在处理处理程序函数中的错误:

func SignUpHandler(c *gin.Context) {
    var form user
    if err := c.ShouldBind(&form); err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }
    if err := models.AddAuth(form.Username, form.Password); err == nil {
        c.JSON(http.StatusOK, gin.H{"status": "you are signed in"})
    } else …
Run Code Online (Sandbox Code Playgroud)

mysql error-handling go go-gorm

4
推荐指数
1
解决办法
3233
查看次数

`%fs:0xfffffffffffffff8`的真实地址是什么?

我想使用ebpf.

在阅读了一些帖子和博客后,我知道%fs:0xfffffffffffffff8指向ggo的结构和mov %fs:0xfffffffffffffff8,%rcx指令总是出现在 go 函数的开头。

main.main作为一个例子:

func main() {
 177341   458330:   64 48 8b 0c 25 f8 ff    mov    %fs:0xfffffffffffffff8,%rcx
 177342   458337:   ff ff
 177343   458339:   48 3b 61 10             cmp    0x10(%rcx),%rsp
 177344   45833d:   76 1a                   jbe    458359 <main.main+0x29>
 177345   45833f:   48 83 ec 08             sub    $0x8,%rsp
 177346   458343:   48 89 2c 24             mov    %rbp,(%rsp)
 177347   458347:   48 8d 2c 24             lea    (%rsp),%rbp
 177348     myFunc()
 177349   45834b:   e8 10 00 …
Run Code Online (Sandbox Code Playgroud)

assembly x86-64 go bpf ebpf

4
推荐指数
1
解决办法
359
查看次数

Golang频道并发问题

我正在尝试Golang中的频道概念。我写了下面的程序操场来实现使用通道的计数器。但是,尽管我正在goroutine主体中进行一些打印,但是我没有得到任何输出。

func main() {
    wg := sync.WaitGroup{}
    ch := make(chan int)

    count := func(ch chan int) {
        var last int
        last = <-ch
        last = last + 1
        fmt.Println(last)
        ch <- last
        wg.Done()
    }

    wg.Add(10)
    for i := 1; i <= 10; i++ {
        go count(ch)

    }
}
Run Code Online (Sandbox Code Playgroud)

我希望至少有一些输出,但是我什么也得不到。

concurrency channel go goroutine

3
推荐指数
1
解决办法
60
查看次数