Golang Go语言中导包为什么会失败?

发布于 1周前 作者 wuwangju 来自 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

7 回复

同一个目录下 包名要相同

更多关于Golang Go语言中导包为什么会失败?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这个原因?草

你用记事本写的?

gomod 不是很好用么。

md, golang 版的内存比 python 还高, 我也是醉了

在Golang(Go语言)中,导包失败可能由多种原因引起。以下是一些常见的原因及其解决策略:

  1. 包路径错误:确保导入的包路径正确无误。路径错误是最常见的导包失败原因。检查是否有拼写错误、大小写不匹配或路径结构错误。

  2. GOPATH/GOMODULE配置问题:如果你的项目使用GOPATH模式,确保包位于正确的GOPATH路径下。对于使用Go Modules的项目,检查go.mod文件是否正确声明了依赖,并确保在正确的模块路径下工作。

  3. 网络问题:如果导入的是远程包(如通过go get获取的第三方库),网络问题可能导致导包失败。检查网络连接,并确认可以访问所需的远程仓库。

  4. 版本不兼容:有时候,包的版本与你的Go语言版本不兼容。检查包的文档,确认其支持的Go版本,并考虑升级或降级Go编译器。

  5. 包未初始化:对于自定义包,确保包内至少有一个.go文件,并且该文件包含了非空的package声明。

  6. 权限问题:在某些系统上,可能由于文件系统权限设置不当导致无法访问包。确保你有足够的权限来读取包所在的目录。

解决导包问题时,可以尝试使用go get -u命令更新依赖,检查并修正go.mod文件,以及确保所有路径和版本信息准确无误。如果问题依旧存在,可以查看Go的编译输出或错误日志,以获取更详细的错误信息。

回到顶部