Struct 无法在golang中包含多个文件
我知道以前有人问过我这个问题,我也尝试过所有可能的答案,但没有什么对我没有帮助 不过,我想再次提出这个问题,并详细阐述我的问题。实际上,我试图在main.go文件中包含一个简单的文件。我的文件夹结构和其余信息如下:Struct 无法在golang中包含多个文件,struct,go,compilation,Struct,Go,Compilation,我知道以前有人问过我这个问题,我也尝试过所有可能的答案,但没有什么对我没有帮助 不过,我想再次提出这个问题,并详细阐述我的问题。实际上,我试图在main.go文件中包含一个简单的文件。我的文件夹结构和其余信息如下: \src\ Multi-file\ lib\Car.go main.go 汽车。出发 package main type Car struct { numberOfDoors int cylinders int
\src\
Multi-file\
lib\Car.go
main.go
汽车。出发
package main
type Car struct {
numberOfDoors int
cylinders int
}
package main
import (
"fmt"
)
func main() {
c := Car{4,6}
fmt.Println(c)
}
package car
type Car struct {
NumberOfDoors int
Cylinders int
}
package main
import (
"car"
"fmt"
)
func main() {
c := car.Car{4, 6}
fmt.Println(c)
}
main.go
package main
type Car struct {
numberOfDoors int
cylinders int
}
package main
import (
"fmt"
)
func main() {
c := Car{4,6}
fmt.Println(c)
}
package car
type Car struct {
NumberOfDoors int
Cylinders int
}
package main
import (
"car"
"fmt"
)
func main() {
c := car.Car{4, 6}
fmt.Println(c)
}
当我完成main.go时,我得到以下错误
# command-line-arguments
.\main.go:8: undefined: Car
以下是我的go env详细信息:
set GOARCH=amd64
set GOBIN=
set GOEXE=.exe
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=C:\xampp\htdocs\golang
set GORACE=
set GOROOT=C:\Go
set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64
set GO15VENDOREXPERIMENT=
set CC=gcc
set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0
set CXX=g++
set CGO_ENABLED=1
仅供参考:我也尝试过将其作为一个甚至没有帮助我的包
任何帮助都将不胜感激 按照说明设置程序和库的工作区: 例如,一个双文件
main
包
src/car
├── car.go
└── main.go
$ cd src/car
$ go run main.go car.go
{4 6}
$ go build car && ./car
{4 6}
$ go install car && car
{4 6}
$
main.go
:
package main
import (
"fmt"
)
func main() {
c := Car{4, 6}
fmt.Println(c)
}
package main
type Car struct {
numberOfDoors int
cylinders int
}
car.go
:
package main
import (
"fmt"
)
func main() {
c := Car{4, 6}
fmt.Println(c)
}
package main
type Car struct {
numberOfDoors int
cylinders int
}
您不应该有两个文件,它们声明在同一个包中,但不在同一个目录中。一种解决方案可能是使用此目录结构:
src\
car\
car.go
main.go
汽车。出发
package main
type Car struct {
numberOfDoors int
cylinders int
}
package main
import (
"fmt"
)
func main() {
c := Car{4,6}
fmt.Println(c)
}
package car
type Car struct {
NumberOfDoors int
Cylinders int
}
package main
import (
"car"
"fmt"
)
func main() {
c := car.Car{4, 6}
fmt.Println(c)
}
main.go
package main
type Car struct {
numberOfDoors int
cylinders int
}
package main
import (
"fmt"
)
func main() {
c := Car{4,6}
fmt.Println(c)
}
package car
type Car struct {
NumberOfDoors int
Cylinders int
}
package main
import (
"car"
"fmt"
)
func main() {
c := car.Car{4, 6}
fmt.Println(c)
}
当然,Car
结构不在main
包中,我必须:
- 将
struct中car.car
和NumberOfDoors
字段的第一个字母更改为大写,以便可以从columns
包访问它们main
- 将对
的调用替换为Car{4,6}
Car.Car{4,6}
不再是包car.go中的代码
的一部分,您现在可以将其作为main
库查看。这就是为什么car
struct现在被声明为Car
包Car
go run main.go
如果您是Go链接器,您将如何决定在\src结构中查找汽车定义?更友好地按照手册中的建议加工和构造您的软件包,并明确导入您需要的内容我尝试了您的代码,但我发现以下错误,main.go:4:5:import“car”是一个程序,不是一个可导入的软件包@peterSO code确实有效,但我对您的答案很好奇,那么你能告诉我是什么问题吗?@FRSTAR我没有这个错误,代码对我有效。您确定在
car.go
文件中将package main替换为package car`?我忘了在我的代码解释中指出这一点,我现在添加它哇,你真的破解了代码,但是我想澄清几件事,1)。go run*.go(这行代码对我不起作用)2)和3)都起作用了,在这行代码之后,我不需要执行下面的go run main.go吗?正如@arainone在下面解释的那样。@FRSTAR:通配符globs,例如,*.go
,是Linux的快捷方式。在Windows上,列出每个文件,例如,go-run main.go-car.go
@FRSTAR:go-run
编译并运行包含命名go源文件的主程序包go build
编译由导入路径命名的包及其依赖项,但不安装结果go install
编译并安装由导入路径命名的包及其依赖项。看见