Golang中无效导入路径的解决方法

Golang中无效导入路径的解决方法 大家好,

我正在学习Todd McLeod的一门课程,遇到了一个障碍。

出于某种原因,当我尝试运行自己编写的代码时,出现了"无效导入路径"的错误。在我的main.go文件所在的同一文件夹中,有另一个包含我编写的自定义包的文件夹。

这是我试图导入的包:

//Package dog takes human years and turns them into dog years
package dog

//Years takes human years as parameter and converts it to dogs years by multiplying the parameter by 
7 and returning the result
func Years(h int) int{
return h * 7

}

而我的main.go文件…

package main
import(
"fmt"
"github.com/nazevedo3/greatercommons/Learn_Go/000-Excercises/Ninja_Level_12/01_Exercise#01/dog"
)
type k struct {
name string
age  int
}

func main(){

homey := k{
	name: "Kiki",
	age:	dog.Years(5),
}

fmt.Println(homey)

}

更多关于Golang中无效导入路径的解决方法的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

皮卡德捂脸表情

谢谢,感谢您的帮助!

更多关于Golang中无效导入路径的解决方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


# 符号在包名中无效。

请参阅 Go 编程语言规范 - Go 编程语言,特别是:

实现限制:编译器可以将 ImportPaths 限制为仅使用属于 Unicode 的 L、M、N、P 和 S 通用类别(不含空格的可打印字符)的非空字符串,并且还可以排除字符 !"#$%&'()*,:;<=>?[\]^{|} 以及 Unicode 替换字符 U+FFFD。

在Go语言中,"无效导入路径"错误通常是由于导入路径不符合Go模块的命名规范或文件系统结构导致的。根据你提供的代码,问题可能出现在导入路径中的特殊字符和目录结构上。

问题分析:

  1. 导入路径 github.com/nazevedo3/greatercommons/Learn_Go/000-Excercises/Ninja_Level_12/01_Exercise#01/dog 包含 # 字符,这在Go导入路径中是不允许的
  2. 需要确保目录结构正确且模块已初始化

解决方案:

  1. 重命名目录:将包含 # 的目录名改为合法的Go标识符
# 将 01_Exercise#01 重命名为 01_Exercise_01
mv "01_Exercise#01" "01_Exercise_01"
  1. 更新导入路径
package main

import(
    "fmt"
    "github.com/nazevedo3/greatercommons/Learn_Go/000-Excercises/Ninja_Level_12/01_Exercise_01/dog"
)

type k struct {
    name string
    age  int
}

func main(){
    homey := k{
        name: "Kiki",
        age:  dog.Years(5),
    }
    fmt.Println(homey)
}
  1. 确保模块配置正确
# 在项目根目录初始化模块
go mod init github.com/nazevedo3/greatercommons

# 或者如果这是本地开发,可以使用本地模块名
go mod init example.com/learn_go
  1. 验证目录结构
Learn_Go/
├── go.mod
├── main.go
└── 000-Excercises/
    └── Ninja_Level_12/
        └── 01_Exercise_01/
            └── dog/
                └── dog.go
  1. dog包代码保持不变
package dog

func Years(h int) int {
    return h * 7
}

完成这些修改后,运行 go mod tidy 来同步依赖,然后再次运行程序应该就能正常工作了。

回到顶部