go - 如何在 Golang 中设置 GODEBUG 环境变量,以便我可以将 godebug 与 net/http 一起使用

标签 go

我想使用 Godebug 单步执行我的程序.但是,因为我使用的是 net/http,所以出现如下错误:

/home/heath/go/src/net/http/h2_bundle.go:45:2: could not import golang_org/x/net/http2/hpack (cannot find package "golang_org/x/net/http2/hpack" in any of:
    /home/heath/go/src/golang_org/x/net/http2/hpack (from $GOROOT)

/x/net/http2/hpack 确实存在于我的 GOPATH 中,但存在于 ~heath/go/src/golang.org 中……而不是 golang_org(不确定那里发生了什么)

我读到这个错误是因为 godebug 还不支持 http2(找不到源)。

我试图通过在 init() 和命令行中设置 GODEBUG env 来禁用 http2server 和 http2client。我还确认这些设置是通过执行 fmt.Println("GODEBUG", os.Getenv("GODEBUG") 设置的。按照位于 here

的说明
GODEBUG=http2client=0  # disable HTTP/2 client support
GODEBUG=http2server=0  # disable HTTP/2 server support

我复制错误的简单代码示例是:

  package main

  import "fmt"
  import "net/http"
  import "os"

  func init() {

      os.Setenv("GODEBUG", "http2server=0,http2client=0")

  }

  func main() {

      fmt.Println("GODEBUG", os.Getenv("GODEBUG"))

      _ = "breakpoint"
      fmt.Println("Hello, World!")
      http.ListenAndServe(":8080", nil)
  }

godebug run example.go

我正在运行 Go 版本:

go版本go1.7 linux/amd64

最佳答案

这可能不是正确的做事方式。但是我将 http2 包从 $GOROOT/src/vendor 下的 vendor 目录复制到 $GOPATH/src 下的 src 目录。

如果有人对引用 vendor 目录的正确方法有任何进一步的意见,请添加您的想法。只是将我的解决方法放在这里,以防其他人遇到同样的问题。

编辑:实际上,一个“更好”的做事方式是执行 ln -s ..src/vender/github_org 到 ../src/github_org

关于go - 如何在 Golang 中设置 GODEBUG 环境变量,以便我可以将 godebug 与 net/http 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39112605/

相关文章:

go - 为什么我不能执行 fmt.Sprintf ("%d.%d.%d.%d",一个...)?

windows - 在 Windows 上使用 exec.Command 进行 noverify

mysql - Go如何与MySQL连接保存数据并再次渲染?

go - 如何使用Jenkins运行SonarQube for Go代码

go - 生成邀请码串号

Go:在 SQL 连接结果后删除重复行

go - Golang在函数中使用结构的全局变量中的设置变量

http - 在 GO 中重新组合大块 zip 下载

golang fifo缓冲 channel

go - 为什么我在fmt.Println中的格式动词不插入我的数据?