我知道之前已经问过question并且我已经尝试了所有可能的答案,但没有什么对我没有帮助。
然而,要再次刷新问题并详细说明我的问题。我实际上是想在main.go文件中包含一个简单的文件。我的文件夹结构和其他信息如下:
\src\
Multi-file\
lib\Car.go
main.go
Car.go
package main
type Car struct {
numberOfDoors int
cylinders int
}
main.go
package main
import (
"fmt"
)
func main() {
c := 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
仅供参考:我尝试包括也不能帮助我的包。
任何帮助都将非常感激。
答案 0 :(得分:4)
按照说明设置程序和库的工作区:How to Write Go Code。
对于您的示例,是一个双文件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)
}
car.go
:
package main
type Car struct {
numberOfDoors int
cylinders int
}
答案 1 :(得分:1)
您不应该有2个文件,这些文件在同一个包中声明但不驻留在同一目录中。一种解决方案可能是改为使用此目录结构:
src\
car\
car.go
main.go
<强> car.go 强>
package car
type Car struct {
NumberOfDoors int
Cylinders int
}
<强> main.go 强>
package main
import (
"car"
"fmt"
)
func main() {
c := car.Car{4, 6}
fmt.Println(c)
}
当然,Car
结构不在main
包中,我不得不:
NumberOfDoors
struct更改为大写Cylinders
和car.Car
字段的第一个字母,以便可以从main
package Car{4,6}
car.Car{4,6}
的来电
car.go
中的代码不再是软件包main
的一部分,您现在可以将其视为car
库。这就是Car
结构现在被声明为package car
就像那样,您可以使用以下步骤构建并运行:
go run main.go