একাধিক ফাইল সমন্বিত গো প্রোগ্রাম কীভাবে সংকলন করবেন?


89

আমার কাছে একটি ছোট প্রোগ্রাম রয়েছে যা তিনটি ফাইল সমন্বিত, সমস্তগুলি একই প্যাকেজ (মূল) এর সাথে সম্পর্কিত তবে আমি যখন "যান বিল্ড মেইন.গো" করি তখন বিল্ডটি সফল হয় না। যখন এটি কেবল একটি ফাইল ছিল (মেইন.গো) সবকিছু ঠিকঠাক কাজ করেছিল। এখন আমি কোডটি আলাদা করার জন্য কিছুটা চেষ্টা করেছি, দেখে মনে হচ্ছে যে সংকলকটি মূল.গো থেকে বের করে নেওয়া এবং এই দুটি আরও ফাইল (যে মূল.গোজের মতো একই ডিরেক্টরিতে থাকে) খুঁজে পাওয়া যায়নি find । যার ফলে "অপরিজ্ঞাত 'টাইপ' ত্রুটি হয়।

একাধিক ফাইল সমন্বিত এই প্রোগ্রামটি কীভাবে সংকলন করবেন?

উত্তর:


87

নতুন উপায় ( প্রস্তাবিত ):

দয়া করে এই উত্তরটি একবার দেখুন

পুরানো উপায়:

মনে করুন আপনি মাইপ্রোগ নামে একটি প্রোগ্রাম লিখছেন:

আপনার সমস্ত ফাইলকে এভাবে ডিরেক্টরিতে রাখুন

myproject/go/src/myprog/xxx.go

তারপরে myproject/goগোপথে যোগ করুন

এবং চালান

go install myprog

আপনি চাইলে এইভাবে আপনি মাইপ্রজেক্ট / গো / এসসিআর তে অন্যান্য প্যাকেজ এবং প্রোগ্রাম যুক্ত করতে সক্ষম হবেন।

তথ্যসূত্র: http://golang.org/doc/code.html

(এই দস্তাবেজটি সর্বদা নতুনদের দ্বারা মিস হয়, এবং প্রায়শই প্রথমে ভুল বোঝে না। এটি গো দলের আইএমওর সর্বাধিক দৃষ্টি আকর্ষণ করা উচিত)


4
কেন / গো / থেকে মুক্তি পাবেন না এবং কেবল মাইপ্রজেক্ট / এসসিআর করবেন?
আলেকজান্ডার মিলস

এছাড়াও, আমি ধরে নিই "গো মাইপ্রোগ ইনস্টল করুন" প্রকল্প উত্সটি কোনওভাবে $ গোপথ স্থানে লেখেন? এটা কি সঠিক? যদি তা হয় তবে উত্তরের অংশ হিসাবে সেই ব্যাখ্যাটি পেয়ে ভাল লাগবে
আলেকজান্ডার মিলস

4
@ অ্যালেক্সান্ডারমিলস কেবলমাত্র ছোট প্রকল্পগুলি কেবল একটি প্রযুক্তি ব্যবহার করছে।
সাগুরেট

4
@ ডেনিসগ্রেট নিশ্চিত নন যে আমি এর সাথে একমত, তবে যাইহোক এটি সহজ প্রকল্পগুলির জন্য, আপনি কেবল গো অংশটি ফেলে দিতে পারেন - লোকেরা ধরে নিতে পারে যে গো জিনিসটি প্রয়োজনীয় এবং এটি তা নয়। আপনি আমাকে বলুন, কোনটি সরল, যাবেন নাকি গো? :)
আলেকজান্ডার মিলস

4
আমি এখনও বুঝতে পারি না কেন এই ফোল্ডারটির কাঠামো?
মেডেও

67

main.goউদাহরণস্বরূপ আপনি যখন কোডটি আলাদা করেন more.go, আপনি কেবল সেই ফাইলটি go build/ go run/ তেও পাস go installকরেন।

আপনি যদি আগে দৌড়ে

go build main.go

আপনি এখন সহজভাবে

go build main.go more.go

আরও তথ্য হিসাবে:

go build --help

বলেছেন:

যদি আর্গুমেন্টগুলি .go ফাইলগুলির একটি তালিকা হয় তবে বিল্ডগুলি তাদের একক প্যাকেজ নির্দিষ্ট করে এমন উত্স ফাইলগুলির তালিকা হিসাবে বিবেচনা করে।


এটি লক্ষ্য করুন go buildএবং যুক্তি হিসাবে প্যাকেজের নাম প্রত্যাশা করা প্রথম দুটি রাষ্ট্রের চেয়ে go installপৃথক , অন্যদিকে ফাইলগুলি প্রত্যাশা করে । যাইহোক, প্রথম দু'জন গো ইনস্টল হিসাবে গো ফাইলগুলি গ্রহণ করবে।go run

যদি আপনি ভাবছেন: বিল্ডটি কেবল buildপ্যাকেজগুলি / ফাইলগুলি installতৈরি করবে , আপনার জিওপ্যাথে অবজেক্ট এবং বাইনারি ফাইল তৈরি runকরবে এবং আপনার প্রোগ্রামটি সংকলন ও পরিচালনা করবে।


6
আপনি যদি আরও বেশি করে ফাইল যুক্ত করতে না চান তবে রিজেক্স ব্যবহার করুন: এর সাথে যান: যান * * যান
NateW

ঠিক আছে ধন্যবাদ, গো কি সবসময় কেবলমাত্র একটি এক্সিকিউটেবল ফাইল লিখি? এটি এক্সিকিউটেবল ফাইলগুলি আলাদা করে রাখে না (জাভার মতো)?
আলেকজান্ডার মিলস

উইন্ডোজগুলির কারণে @ আলেকজান্ডারমিলগুলি, আমি মনে করি, নিক্স ব্যবহার করুন। বা কমপক্ষে mingw।
সের্গেই গোর্লানভ

হ্যাঁ আমি ম্যাকওএস ব্যবহার করছিলাম, তবে সম্ভবত এটি বাশ সংস্করণ 3 যা শেষ হয়ে গেছে, আমার বাশ 4-এ আপগ্রেড করা উচিত
আলেকজান্ডার মিলস

30

আপনি ঠিক চালাতে পারে

go build

আপনার প্রকল্প ফোল্ডারে মাইপ্রজেক্ট / গো / এসআরসি / মাইপ্রোগ

তারপরে আপনি কেবল টাইপ করতে পারেন

./myprog

আপনার অ্যাপ্লিকেশন চালানোর জন্য


4
আউটপুট একটি গো অবজেক্ট, এক্সিকিউটেবল নয়।
ব্যবহারকারী 2284570

@ ব্যবহারকারী 2284570 কেবল chmod +xএই ফাইলটি চালানোর জন্য অনুমতি যুক্ত করুন
30:53

21

Go 1.11+, যেহেতু GOPATH আর সুপারিশ করা হয় না, নতুন উপায় গো মডিউল ব্যবহার করছে।

বলুন যে আপনি একটি প্রোগ্রাম লিখেছেন simple:

  1. একটি ডিরেক্টরি তৈরি করুন:

    mkdir simple
    cd simple
    
  2. একটি নতুন মডিউল তৈরি করুন:

    go mod init github.com/username/simple
    # Here, the module name is: github.com/username/simple.
    # You're free to choose any module name.
    # It doesn't matter as long as it's unique.
    # It's better to be a URL: so it can be go-gettable.
    
  3. আপনার সমস্ত ফাইল সেই ডিরেক্টরিতে রেখে দিন।

  4. শেষ পর্যন্ত, চালান:

    go run .
    
  5. বিকল্পভাবে, আপনি এটিকে তৈরি করে একটি এক্সিকিউটেবল প্রোগ্রাম তৈরি করতে পারেন:

    go build .
    
    # then:
    ./simple     # if you're on xnix
    
    # or, just:
    simple       # if you're on Windows
    

আরো তথ্যের জন্য, আপনি পড়তে পারেন এই

1.11 থেকে এখানে প্রস্তাবিত সংস্করণযুক্ত মডিউলগুলির জন্য গো অন্তর্ভুক্ত করেছে। প্রাথমিক প্রোটোটাইপ ভিজিও ফেব্রুয়ারী 2018 এ ঘোষণা করা হয়েছিল। জুলাই 2018 এ, সংস্করণযুক্ত মডিউলগুলি মূল গো সংগ্রহস্থলে এসেছিল। Go 1.14 এ, মডিউল সমর্থন উত্পাদন ব্যবহারের জন্য প্রস্তুত হিসাবে বিবেচিত হয় এবং সমস্ত ব্যবহারকারীরা অন্যান্য নির্ভরতা পরিচালন সিস্টেম থেকে মডিউলগুলিতে মাইগ্রেট করতে উত্সাহিত করা হয়।


7

তুমি ব্যবহার করতে পার

go build *.go 
go run *.go

উভয়ই আপনি ব্যবহার করতে পারেন কাজ করবে

go build .
go run .

6

এটি আপনার প্রকল্পের কাঠামোর উপর নির্ভর করে। তবে সবচেয়ে সোজা:

go build -o ./myproject ./...

তারপর চালান ./myproject

মনে করুন আপনার প্রকল্পের কাঠামোটি এরকম দেখাচ্ছে

- hello
|- main.go

তারপরে আপনি কেবল প্রকল্প ডিরেক্টরিতে যান এবং চালান

go build -o ./myproject

তারপরে ./myprojectশেল চালাও

বা

# most easiest; builds and run simultaneously
go run main.go

ধরুন আপনার মূল ফাইলটি একটি উপ-ডিরেক্টরিতে যেমন একটির মতো নেস্টেড হয়েছে cmd

- hello
|- cmd
 |- main.go

তাহলে আপনি দৌড়াবেন

go run cmd/main.go

3

হা! এটি খুব সোজা এগিয়ে এবং প্যাকেজ কৌশল কার্যকর হয় যেখানে। আমার জ্ঞানের তিনটি উপায় আছে। ফোল্ডার কাঠামো:

GOPATH / src / github.com/ abc / myproject / adapter / main.go pkg1 pkg2 সতর্কতা: অ্যাডাপ্টারে কেবল প্যাকেজ প্রধান এবং সূর্য ডিরেক্টরি থাকতে পারে

  1. "অ্যাডাপ্টার" ফোল্ডারে নেভিগেট করুন। চালান:
    go build main.go
  1. "অ্যাডাপ্টার" ফোল্ডারে নেভিগেট করুন। চালান:
    go build main.go
  1. GOPATH / src এ নেভিগেট করুন প্যাকেজ প্রধানের আপেক্ষিক পথটি সনাক্ত করুন, এখানে "মাইপ্রজেক্ট / অ্যাডাপ্টার" রয়েছে। চালান:
    go build myproject/adapter

উদাহরণস্বরূপ, আপনি বর্তমানে যে ডিরেক্টরিটিতে রয়েছেন EXE ফাইল তৈরি করা হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.