Golang中安装httprouter时遇到问题怎么办

Golang中安装httprouter时遇到问题怎么办 我想尝试使用 httprouter,但无法安装它,出现了以下错误。 请问有什么解决方案吗?

我尝试了所有可能的命令,例如: go install <path to HTTP router@latest" 但都不起作用!

image

12 回复

如果你找不到 copy 命令的路径,那么也许 copy 是一个内置命令?我不确定这在 Windows 中是如何工作的。Unix shell 确实有像 pushdpopd 这样的内置命令。

也许可以尝试不使用路径来调用 copy

更多关于Golang中安装httprouter时遇到问题怎么办的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我尝试在 httprouter 文件夹内执行 go mod init htttprouter 命令。

image

命令

@christophberger 抱歉!最后一张截图没有显示黄线的警告。

image

你真是太棒了。感谢你提供的所有指导,它们都奏效了。送上满满的关爱。

你知道如何在 VSCode (Windows) 中让那个 copy 命令工作吗?具体应该写哪一行代码?

不过,我还没能找到 copy 的路径。我已经在上面聊天中贴出了它们的链接。

我尝试使用命令获取GIT版本,它成功了。但代码中有两行黄色标记,不明白为什么会这样?

不过,Windows中相当于Linux的cat命令是什么?

image

是的,那是 copy 命令,但在 Windows 中找不到它的路径。 它的路径应该是什么?

图片

copy

copy 命令的参考文章,该命令将一个或多个文件从一个位置复制到另一个位置。

你好 @shubhra

看起来你还没有 go.mod 文件。

运行 go mod init mymodule,然后运行 go get 来下载 httprouter。请将 mymodule 替换为你想要给模块起的名字。

(专业提示:通常的做法是使用一个类似路径的字符串,例如 go mod init github.com/myorg/mymodule。这样,模块以后可以发布到远程仓库,而无需更改模块路径。)

这是来自 linter (go-staticcheck) 的警告。它基本上是说,如果你不使用格式字符串,就不需要使用 Fprintf()。(即,一个包含像 %s%d 这样的“动词”的字符串,这些动词映射到后续的参数。例如:fmt.Fprintf(w, "x is %d and y is %s", x, y)。)

只需使用 Fprint()Fprintln() 即可消除此警告。

我们的回复交错而过了。

shubhra:

代码中有两条黄色线条,不明白为什么会这样?

不确定,尝试将鼠标光标悬停在这些行上以获取更多信息。或者点击下方窗格中的“问题”选项卡。

shubhra:

Windows 中与 Linux 命令 cat 等效的命令是什么?

我自 2008 年以来就没有使用过 Windows,所以恐怕我无法回答 Windows 特有的问题。快速网络搜索表明,与 cat 等效的命令是 type

然而,根据这个讨论type 似乎存在一些问题(请参阅已采纳答案下方的评论),所以有些人似乎更喜欢使用 copy /b(请参阅第二个答案)。

哇!使用 localhost 解决了 Windows 防火墙的问题。你太棒了。当我尝试将鼠标悬停在黄色线条上时,你可以从下面的截图中看到它显示的错误/问题。如果对此有解决方案,请告诉我。 另外,在 Windows 中,相当于 cat 的命令是什么,用来显示整个文件内容?

所以,重要的学习点如下: 重要笔记:

  1. 使用 localhost 以避免出现 Windows 防火墙弹窗:log.Fatal(http.ListenAndServe("localhost:8000", router))
  2. 要安装路由器,首先使用以下命令
    git mod init httprouter
    git tidy
    git install http://github.com/julienschmidt/httprouter
    

image

为什么每次运行 go run main.go 命令时,我都会收到这个 Windows 防火墙拦截提示?

这是正常现象。你启动了一个可以接收来自本机外部连接请求的 Web 服务器。操作系统认为这是一个潜在的安全漏洞(因为系统不知道你的 Web 服务器是否是恶意的),所以会发出警告。

尝试将 ListenAndServe 调用改为:

http.ListenAndServe("localhost:8000", router)

这样服务器就只监听来自本地主机的请求,Windows 应该 就不会再报错了。

我们是在模块内部还是外部生成 mod 文件?

go.mod 文件位于模块的根目录中。另请参阅:管理模块源代码 - Go 编程语言

我运行了 go install 命令来安装 httprouter。这样做对吗?但代码中关于 httprouter github 的那一行仍然高亮显示。

我不太确定你的意思。是哪一行高亮显示?如果你将鼠标光标悬停在高亮显示的行上,编辑器是否会显示高亮的原因?

我尝试在文件夹 httprouter 中创建 go mod init htttprouter

文件结构在我看来是正确的。go.modgo.summain.go 位于同一目录。

Screenshot 2023-05-20 at 14.35.55

从错误信息来看,问题是由于 go install 命令的格式不正确导致的。go install 用于安装可执行文件,而不是库包。要安装 httprouter 作为项目依赖,正确的方法是使用 go get 或在 go.mod 文件中添加依赖。

以下是解决方案:

1. 使用 go get 安装依赖

go get github.com/julienschmidt/httprouter

2. 或者在 go.mod 中直接添加依赖

go mod init your-project-name
go mod edit -require github.com/julienschmidt/httprouter@latest
go mod tidy

3. 完整示例代码

package main

import (
    "fmt"
    "net/http"
    "github.com/julienschmidt/httprouter"
    "log"
)

func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
    fmt.Fprint(w, "Welcome!\n")
}

func Hello(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
    fmt.Fprintf(w, "hello, %s!\n", ps.ByName("name"))
}

func main() {
    router := httprouter.New()
    router.GET("/", Index)
    router.GET("/hello/:name", Hello)

    log.Fatal(http.ListenAndServe(":8080", router))
}

4. 如果使用 Go 1.16+ 版本

对于 Go 1.16 及以上版本,推荐使用:

go mod init your-project
go get github.com/julienschmidt/httprouter@latest

安装完成后,运行 go mod tidy 确保依赖关系正确解析。

回到顶部