无法在golang中包含多个文件

时间:2016-01-09 16:03:53

标签: struct go compilation

我知道之前已经问过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

仅供参考:我尝试包括也不能帮助我的包。

任何帮助都将非常感激。

2 个答案:

答案 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更改为大写Cylinderscar.Car字段的第一个字母,以便可以从main package
  • 访问它们
  • 使用Car{4,6}
  • 替换car.Car{4,6}的来电
  • car.go中的代码不再是软件包main的一部分,您现在可以将其视为car库。这就是Car结构现在被声明为package car
  • 的一部分的原因

就像那样,您可以使用以下步骤构建并运行:

go run main.go