2014-11-15 15 views
27

Tôi đang gặp khó khăn trong việc nhập tệp đi cục bộ vào một tệp đi khác.nhập các tệp đi trong cùng một thư mục

cấu trúc dự án của tôi là một cái gì đó giống như dưới đây

-samplego 
--pkg 
--src 
---github.com 
----xxxx 
-----a.go 
-----b.go 
--bin 

Tôi cố gắng để nhập a.go bên b.go. Tôi đã thử những điều sau đây,

import "a" 
import "github.com/xxxx/a" 

Không có cách nào trong số này hoạt động ... Tôi hiểu rằng tôi phải can thiệp với GOPATH nhưng tôi không thể làm đúng. Hiện nay GOPATH tôi được trỏ đến samplego (/ workspace/samplego) .Tôi nhận được lỗi dưới đây

cannot find package "a" in any of: 
/usr/local/go/src/pkg/a (from $GOROOT) 
/workspace/samplego/src/a (from $GOPATH) 

Ngoài ra, làm thế nào để làm việc GOPATH khi những tập tin nguồn được nhập khẩu vào một dự án/mô-đun? Việc nhập khẩu địa phương có phải là vấn đề không? Thực hành tốt nhất trong trường hợp này - là nó chỉ có một tập tin đi trong mô-đun (với các bài kiểm tra liên quan)?

+0

Bất kỳ số lượng tệp nào trong thư mục là một phần của cùng một gói ngay từ đầu. (Và họ cần phải có cùng một 'gói a' tuyên bố ở đầu trang.) – twotwotwo

+0

Cảm ơn @twotwotwo ... Bạn có thể cho tôi biết làm thế nào để giải quyết vấn đề trên? Ngoài ra, khi chúng tôi có nhiều tập tin đi trong một gói nên nhập theo con đường đầy đủ ví dụ. github.com/xxxx/a hoặc chỉ cần làm –

Trả lời

28

Bất kỳ số lượng tệp nào trong một thư mục là một gói duy nhất; các biểu tượng được khai báo trong một tệp có sẵn cho những tệp khác mà không có bất kỳ số nào hoặc các mã định danh import. Tất cả các tập tin cần phải khai báo package foo tương tự ở trên cùng (hoặc bạn sẽ gặp lỗi từ go build).

Bạn cần GOPATH được đặt thành thư mục có các thư mục pkg, srcbin của bạn. Đây chỉ là vấn đề ưu tiên, nhưng thường có một không gian làm việc duy nhất cho tất cả các ứng dụng của bạn (đôi khi là $HOME), không phải một ứng dụng cho mỗi ứng dụng.

Thông thường đường dẫn Github sẽ là github.com/username/reponame (không chỉ github.com/xxxx). Vì vậy, nếu bạn muốn có main và một gói khác, bạn có thể sẽ làm một cái gì đó dưới workspace/src như

github.com/ 
    username/ 
    reponame/ 
     main.go // package main, importing "github.com/username/reponame/b" 
     b/ 
     b.go // package b 

Lưu ý bạn luôn nhập với github.com/... đường dẫn đầy đủ: nhập khẩu tương đối không được phép vào một không gian làm việc. Nếu bạn cảm thấy mệt mỏi khi gõ đường dẫn, hãy sử dụng goimports. Nếu bạn đang sử dụng số điện thoại go run, đã đến lúc chuyển sang số go build: run giao dịch kém với nhiều tệp main s và tôi không bận tâm kiểm tra nhưng đã nghe (từ Dave Cheney here) go run không xây dựng lại các phụ thuộc bẩn. Có vẻ như bạn đã cố gắng đặt GOPATH thành đúng thứ, vì vậy nếu bạn vẫn bị kẹt, có thể bao gồm chính xác cách bạn đặt biến môi trường (lệnh, v.v.) và lệnh nào bạn đã chạy và những gì đã xảy ra lỗi. Here are instructions on how to set it (and make the setting persistent) under Linux/UNIXhere is the Go team's advice on workspace setup. Có lẽ không giúp được gì, nhưng hãy xem và ít nhất là điểm mà phần nào làm bạn bối rối nếu bạn bối rối.

+1

goimports khá hữu ích :) –

+0

Nếu bạn gặp sự cố khi chạy nhiều tệp trong gói chính, hãy xem [câu trả lời này] (http://stackoverflow.com/a/28081554/616644). –

8

./main.go (trong gói chính)
./a/a.go (trong gói a)
./a/b.go (trong gói một)

trong trường hợp này:
main.go nhập "./a"

Nó có thể gọi hàm trong a.go và b.go, với chữ cái đầu tiên được bật.

0

Không cần nhập khẩu miễn là bạn khai báo cả hai a.gob.go để ở trong cùng một gói. Sau đó, bạn có thể sử dụng go run để nhận dạng nhiều tệp với:

$ go run a.go b.go 
+0

Điều này không cung cấp câu trả lời cho câu hỏi. Khi bạn có đủ [danh tiếng] (https://stackoverflow.com/help/whats-reputation), bạn sẽ có thể [nhận xét về bất kỳ bài đăng nào] (https://stackoverflow.com/help/privileges/comment); thay vào đó, [cung cấp câu trả lời không yêu cầu làm rõ từ người hỏi] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-thay thế). - [Từ đánh giá] (/ đánh giá/bài đăng chất lượng thấp/19039597) –

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