2013-01-19 43 views
38

Trong GOPATH của tôi, tôi có một cái gì đó như thế này:Golang: Lỗi "không thể tải gói: gói my_prog: tìm thấy gói my_prog và chính"

/bin/ 
/pkg/ 
/src/ 
/src/my_prog/ 
/src/my_prog/main.go 
/src/my_prog/d_interface.go 
/src/my_prog/d_struct_that_implements_the_interface.go 

Trong main.go Tôi có package main, trong d_interface.god_struct_that_implements_the_interface.go Tôi có package my_prog.

Khi tôi cố gắng go build my_prog tôi nhận được lỗi sau:

can't load package: package my_prog: found packages my_prog (d_interface.go) and main (main.go) in C:\dev\Code\Go\src\my_prog 

Điều này có nghĩa rằng bất kỳ tập tin đó thuộc về package main nên đi trong thư mục riêng của mình? Nếu vậy, lý do cho việc này là gì?

Trả lời

40

Có, mỗi gói phải được xác định trong thư mục riêng của nó.

Cấu trúc nguồn được xác định trong How to Write Go Code.

Gói là thành phần mà bạn có thể sử dụng trong nhiều chương trình, bạn có thể xuất bản, nhập, nhận từ URL, v.v. Vì vậy, có ý nghĩa để nó có thư mục riêng của mình nhiều như chương trình có một thư mục.

+0

Có, nhưng gói chính có đủ điều kiện làm gói độc lập không? Theo sự hiểu biết của tôi, gói chính là một ngôn ngữ không gian của ngôn ngữ cung cấp điểm vào (giống như các lớp của Java có chính tĩnh công cộng). – TheTeaMan

+0

Vâng, đó là cách hoạt động của nó. Trong thực tế tôi đặt trong gói "chính" của tôi rất ít mã, chỉ có một mà không thể được sử dụng trong các chương trình khác. –

+3

Đó là khá khó chịu để được thẳng thắn. Tôi không thấy lý do để tách điểm nhập chính khỏi phần còn lại của chương trình. Tôi sẽ chấp nhận câu trả lời này. – TheTeaMan

0

đảm bảo rằng gói của bạn được cài đặt trong thư mục $ gopath của bạn hoặc đã nằm trong không gian làm việc của bạn.

Ví dụ: nếu bạn $ gopath = "c: \ đi", đảm bảo rằng các gói bên trong "C: \ Go \ src \ pkg \ github.com"

9

Ngoài ra, nếu tất cả các bạn đang cố gắng cần làm là chia nhỏ tệp main.go thành nhiều tệp, sau đó chỉ cần đặt tên cho các tệp khác là "gói chính" miễn là bạn chỉ xác định hàm chính trong một trong các tệp đó, bạn nên làm tốt.

Các vấn đề liên quan