2014-11-26 19 views
6

Là một nhà phát triển Python và Django, tôi có thể chạy bất kỳ đoạn mã nào trong dự án của mình bằng cách sử dụng tập lệnh độc lập.Có nhiều chức năng chính trên Go

Tôi không chắc chắn làm thế nào để đạt được điều tương tự trong Go, vì có vẻ như mỗi dự án Go chỉ nên có một tệp thực thi chính.

Tôi muốn gọi hàm trong dự án của mình từ cronjob, nhưng tôi không chắc chắn cách thêm vào đó. Sử dụng cờ trong chức năng chính của tôi là cách duy nhất tôi có thể nghĩ về việc này. Nhưng nó sẽ trông khá khó hiểu nếu kịch bản của tôi chấp nhận cờ bổ sung bằng cách riêng của mình như sau:

go run server.go --debug --another-flag --script-name <MY-SCRIPT> --my-script-flag-one <FLAG-ONE> --my-script-flag-two <FLAG-TWO> 

Có cách thanh lịch để làm điều này?

+0

Bạn có thể tìm thấy câu hỏi này hữu ích: [một cách hợp lý để là gì layout a Go project] (http://stackoverflow.com/q/14867452/142162) –

+0

Làm cho đoạn mã một gói và một lệnh. Ví dụ: [Tôi có thể có thư viện và nhị phân có cùng tên không?] (Http://stackoverflow.com/questions/14284375/can-i-have-a-library-and-binary-with-the-same- tên/14284575) – peterSO

+0

một số sự nhầm lẫn là suy nghĩ của đi như một ngôn ngữ kịch bản. 'go run' chắc chắn không nên được sử dụng cho những thứ khác ngoài việc chơi thử với một thử nghiệm nhỏ, ví dụ: một cái gì đó bạn sẽ đặt trên 'play.golang.org' – Dustin

Trả lời

5

tôi tham khảo trong "What is a sensible way to layout a Go project" bài viết "Structuring Applications in Go", trong đó cho thấy một ví dụ về dự án camlistore.
Dự án đó bao gồm several cmd packages, mỗi dự án có các tùy chọn riêng.

Tùy chọn khác sẽ là sử dụng thư viện giao diện CLI như spf13/cobra, cho phép bạn xác định một số lệnh (cùng exe, các bộ tùy chọn riêng biệt).

Command là điểm trung tâm của ứng dụng.
Mỗi tương tác mà ứng dụng hỗ trợ sẽ được chứa trong một Command.
Lệnh có thể có lệnh con và tùy chọn chạy một hành động.

Trong ví dụ "hugo server --port=1313", 'server' là lệnh

Một Command có cấu trúc sau:

type Command struct { 
    Use string // The one-line usage message. 
    Short string // The short description shown in the 'help' output. 
    Long string // The long message shown in the 'help <this-command>' output. 
    Run func(cmd *Command, args []string) // Run runs the command. 
} 
Các vấn đề liên quan