2013-01-19 46 views
5

Tôi đang cố gắng tạo một máy tính đơn giản trong Go. Tôi đang thiết kế nó theo cách mà tôi có thể xây dựng một giao diện dòng lệnh đầu tiên và dễ dàng trao đổi trong giao diện GUI. Vị trí dự án là $GOPATH/src/gocalc (tất cả các đường dẫn sau đây đều liên quan đến vị trí dự án). Logic giao diện dòng lệnh được lưu trữ trong một tệp gocalc.go. Logic máy tính được lưu trữ trong các tệp calcfns/calcfns.gooperations/operations.go. Tất cả các file có tên gói giống với tên tập tin (phần mở rộng sans) của họ ngoại trừ chương trình chính, gocalc.go, mà là trong package mainCấu trúc gói xây dựng với các gói con/gói

calcfns.go nhập khẩu operations.go qua import "gocalc/operations"; gocalc.go nhập khẩu calcfns.go qua import "gocalc/calcfns"

Để tóm tắt:

  • $GOPATH/src/gocalc/
    • gocalc.go
      • package main
      • import "gocalc/calcfns"
    • calcfns/
      • calcfns.go
        • package calcfns
        • import "gocalc/operations"
    • operations/
      • operations.go
        • package operations

Khi tôi cố gắng go build operations (từ dir dự án), tôi nhận được câu trả lời: can't load package: package operations: import "operations": cannot find package Khi tôi cố gắng go build gocalc/operations, tôi nhận được can't load package: package gocalc/operations: import "gocalc/operations": cannot find package Khi tôi cố gắng go build operations/operations.go , nó biên soạn tiền phạt

Khi tôi cố gắng go build calcfns hoặc go build gocalc/calcfns, tôi nhận được thông báo can't load package..., tương tự như các thông báo đang hoạt động; Tuy nhiên, khi tôi cố gắng xây dựng calcfns/calcfns.go nó cuộn cảm trên báo cáo kết quả nhập khẩu: import "gocalc/operations": cannot find package

Cuối cùng, khi tôi cố gắng go build . từ dir dự án, nó cuộn cảm tương tự như đoạn trước: import "gocalc/calcfns": cannot find package

Làm thế nào tôi nên cấu trúc con tôi các gói và/hoặc báo cáo nhập khẩu theo cách mà go build sẽ không thành công?

Trả lời

6

Ngớ ngẩn, tôi quên xuất biến GOPATH của mình, vì vậy go env hiển thị "" cho GOPATH. (nhờ jnml để đề xuất in go env; +1).

Sau khi thực hiện việc này (và di chuyển chương trình chính vào thư mục riêng của mình {project-dir}/gocalc/gocalc.go), tôi có thể xây dựng/cài đặt chương trình qua go install gocalc/gocalc.

đạo đức của câu chuyện, chắc chắn rằng bạn gõ export GOPATH=... thay vì chỉ GOPATH=... khi thiết của bạn $ GOPATH biến môi trường

1

Hãy thử thêm đầu ra của $ go env để cung cấp thêm manh mối.Nếu không, cả cấu trúc thư mục và các câu lệnh nhập được hiển thị) sẽ hiển thị OK.

Tuy nhiên câu

Khi tôi cố gắng để đi xây dựng các hoạt động (từ dir dự án), tôi nhận được câu trả lời: không thể tải gói: hoạt động gói: import "hoạt động": không thể tìm thấy gói

có vẻ lạ. Dường như đề xuất bạn có

package operations 

import "operations" 

trong 'operations.go', thủ phạm nào sau đó ...?

+0

Không, 'hoạt động' không cố tự nhập. ;) Nhưng 'go env' của bạn đã cho tôi thấy rằng tôi đã sử dụng' GOPATH = $ HOME/Projects/Go' thay vì 'export GOPATH = $ HOME/Projects/Go', vốn là thủ phạm thực sự. Điều thú vị là, 'echo $ GOPATH' vẫn tạo ra" '[abs path to ~]/Projects/Go'"; Tuy nhiên, 'đi env' cho thấy' GOPATH = "" 'hoặc một số như vậy. Cám ơn vì sự gợi ý. +1 – weberc2

-1

Rất dễ dàng:

phép nói rằng tôi có một dự án/ứng dụng có tên: golang-playground

  1. Đặt thư mục gốc của bạn dưới GOPATH/src/, trong trường hợp của tôi GOPATH=~/go/src (chạy lệnh go env để nhận số GOPATH). con đường để hoàn chỉnh cho ứng dụng của tôi là ~/go/src/golang-playground enter image description here

  2. phép nói rằng bạn muốn sử dụng chức năng Index() bên trong file: router.go từ file main.go của tôi (trong đó tất nhiên là trên thư mục gốc). như vậy trong main.go:

    import (
        ... 
        "golang-playground/router" 
    ) 
    
    func main() { 
        foo.Bar("/", router.Index) // Notice caps means its public outside of file 
    } 
    
Các vấn đề liên quan