Golang Go语言中导包为什么会失败?
Golang Go语言中导包为什么会失败?
文件结构
/home/vagrant/gocode/gtail
├── go.mod
├── go.sum
├── log_watcher.go
├── main.go
└── playbooks
├── file_watcher
│ └── compile.json
└── session.yaml
log_watcher 的内容
package log_watcher
import (
“fmt”
“log”
“os”
“path/filepath”
)
type LogWatcher struct {
Pattern string
}
func (c *LogWatcher) tail() {
matches, err := filepath.Glob(c.Pattern)
if err != nil {
log.Fatal(err)
return
}
for k, v := range matches {
file_obj, err := os.Open(v)
if err != nil {
log.Fatal(err)
return
}
go func() {
buf := make([]byte, 1024)
for {
n, _ := file_obj.Read(buf)
if 0 == n {
break
}
fmt.Print(buf[:n])
}
}()
}
return
}
main.go
的内容
package main
import (
“fmt”
“log”
“os”
"github.com/urfave/cli"
"gtail/log_watcher"
)
func main() {
var pattern string
app := &cli.App{
Name: “gtail”,
Usage: “golang tail”,
Flags: []cli.Flag{
&cli.StringFlag{
Name: “pattern”,
Usage: “language for the greeting”,
Required: true,
Destination: &pattern,
},
},
Action: func(c *cli.Context) error {
if len(pattern) == 0 {
fmt.Printf(“miss pattern\n”)
return nil
}
var log_watcher = &LogWatcher{
Pattern: pattern,
}
log_watcher.tail()
},
}
err := app.Run(os.Args)
if err != nil {
log.Fatal(err)
}
}
为什么 build 的时候提示
can't load package: package gtail: found packages log_watcher (log_watcher.go) and main (main.go) in /home/vagrant/gocode/gtail
我另一个项目这么导包又成功了,感觉 golang 的导包真的玄学,
更多关于Golang Go语言中导包为什么会失败?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这个原因?草
你用记事本写的?
gomod 不是很好用么。
用的 vscode.
md, golang 版的内存比 python 还高, 我也是醉了
在Golang(Go语言)中,导包失败可能由多种原因引起。以下是一些常见的原因及其解决策略:
-
包路径错误:确保导入的包路径正确无误。路径错误是最常见的导包失败原因。检查是否有拼写错误、大小写不匹配或路径结构错误。
-
GOPATH/GOMODULE配置问题:如果你的项目使用GOPATH模式,确保包位于正确的GOPATH路径下。对于使用Go Modules的项目,检查go.mod文件是否正确声明了依赖,并确保在正确的模块路径下工作。
-
网络问题:如果导入的是远程包(如通过
go get
获取的第三方库),网络问题可能导致导包失败。检查网络连接,并确认可以访问所需的远程仓库。 -
版本不兼容:有时候,包的版本与你的Go语言版本不兼容。检查包的文档,确认其支持的Go版本,并考虑升级或降级Go编译器。
-
包未初始化:对于自定义包,确保包内至少有一个
.go
文件,并且该文件包含了非空的package
声明。 -
权限问题:在某些系统上,可能由于文件系统权限设置不当导致无法访问包。确保你有足够的权限来读取包所在的目录。
解决导包问题时,可以尝试使用go get -u
命令更新依赖,检查并修正go.mod文件,以及确保所有路径和版本信息准确无误。如果问题依旧存在,可以查看Go的编译输出或错误日志,以获取更详细的错误信息。