উত্তর:
কি go
কমান্ড কিনা আমরা একটি "স্বাভাবিক" প্যাকেজের জন্য এটি চালানোর বা বিশেষ জন্য নির্ভর "main"
প্যাকেজ।
প্যাকেজগুলির জন্য
go build
আপনার প্যাকেজ তৈরি করে তারপরে ফলাফলগুলি বাতিল করে দেয় ।go install
তারপরে আপনার ডিরেক্টরিতে প্যাকেজ ইনস্টল করে তোলে $GOPATH/pkg
।কমান্ডের জন্য (প্যাকেজ main
)
go build
কমান্ডটি তৈরি করে এবং ফলাফলটি বর্তমান কার্যক্ষম ডিরেক্টরিতে ফেলে দেয় ।go install
অস্থায়ী ডিরেক্টরিতে কমান্ডটি তৈরি করে তারপরে এটি সরানো হয় $GOPATH/bin
।go build
?আপনি পাস হতে পারে প্যাকেজ থেকে go build
, প্যাকেজ আপনি গড়তে চাই। আপনি .go
একটি একক ডিরেক্টরি থেকে ফাইলগুলির একটি তালিকাও পাস করতে পারেন , যা পরে একক প্যাকেজ নির্দিষ্ট করে এমন উত্স ফাইলগুলির তালিকা হিসাবে বিবেচিত হবে।
যদি কোনও প্যাকেজ (আমদানির পাথ) সরবরাহ না করা হয় তবে বর্তমান ডিরেক্টরিটিতে বিল্ডটি প্রয়োগ করা হবে।
আমদানির পথে একটি বা একাধিক "..."
ওয়াইল্ডকার্ড থাকতে পারে (এটি ক্ষেত্রে এটি একটি নিদর্শন )। ...
যে কোনও স্ট্রিংয়ের সাথে net/...
মিল রাখতে পারে , যেমন net
প্যাকেজ এবং প্যাকেজগুলির সাথে এটির যে কোনও সাবফোল্ডার রয়েছে তার সাথে মেলে । আদেশ
go build ./...
প্রায়শই বর্তমান ফোল্ডারে প্যাকেজ তৈরি করতে এবং সমস্ত প্যাকেজগুলি পুনরাবৃত্তি করতে ব্যবহৃত হয়। একটি প্রকল্পের রুটে জারি করা এই আদেশটি সম্পূর্ণ প্রকল্পটি তৈরি করে।
প্যাকেজ নির্দিষ্ট করার বিষয়ে আরও জানতে চালনা করুন go help packages
।
গো মডিউলগুলির প্রাথমিক সমর্থন গো 1.11 সালে চালু হয়েছিল এবং মডিউলগুলি Go 1.13 দিয়ে শুরু হয়ে ডিফল্ট হয়েছিল। যখন go
সরঞ্জামটি কোনও ফোল্ডার থেকে চালিত হয় যার মধ্যে একটি go.mod
ফাইল থাকে (বা বর্তমান ফোল্ডারের মা-বাবার মধ্যে একটি) থাকে, তখন go
টুলটি মডিউল-সচেতন মোডে চলে (লিগ্যাসি মোডটিকে বলা হয় জিওপ্যাথ মোড )।
মডিউল-সচেতন মোডে, গোপথ কোনও বিল্ড চলাকালীন আর আমদানির অর্থ সংজ্ঞায়িত করে না, তবে এটি ডাউনলোড করা নির্ভরতা (জিওপিএটিএইচ / পিকেজি / মোডে) এবং ইনস্টলড কমান্ডগুলি (জিওপিএইচটি / বিনে, গোবিন সেট না করা থাকে) সঞ্চয় করে।
মডিউলগুলি তৈরি করার সময়, বিল্ড তালিকার মাধ্যমে যা নির্মিত হয় তা সুনির্দিষ্ট করা হয় । বিল্ড তালিকায় প্রাথমিকভাবে কেবলমাত্র মূল মডিউল থাকে (ডিরেক্টরিটি সম্বলিত মডিউল যেখানে go
কমান্ডটি চালিত হয়) এবং মূল মডিউলটির নির্ভরতা বিল্ড তালিকায় যুক্ত হয়, পুনরাবৃত্তভাবে (নির্ভরতার নির্ভরতাও যুক্ত করা হয়)।
আরও তথ্যের জন্য, চালান go help modules
।
মূলত আপনি go build
একটি চেক হিসাবে ব্যবহার করতে পারেন যা প্যাকেজগুলি নির্মিত হতে পারে (তাদের নির্ভরতার সাথে) go install
এছাড়াও (স্থায়ীভাবে) আপনার সঠিক ফোল্ডারে ফলাফল ইনস্টল করে $GOPATH
।
go build
সবকিছু ঠিকঠাক থাকলে নিঃশব্দে অবসান হবে এবং প্যাকেজগুলি নির্মাণ / সংকলন না করতে পারলে আপনাকে ত্রুটি বার্তা দেবে।
যখনই go
সরঞ্জামটি একটি প্যাকেজ বা বাইনারি ইনস্টল করে, এটি যা কিছু নির্ভর করে সেগুলিও ইনস্টল করে, তাই চলমান go install
আপনার প্রোগ্রামটি প্যাকেজগুলিও ইনস্টল করবে (সর্বজনীনভাবে উপলব্ধ, "গেটে টেবিল" প্যাকেজগুলি) স্বয়ংক্রিয়ভাবে।
শুরু করার জন্য, সরকারী কোডটি কীভাবে লিখতে হয় পৃষ্ঠা পৃষ্ঠাটি পড়ুন।
go
সরঞ্জাম সম্পর্কে আরও তথ্য : কমান্ড গো
আপনি নিম্নলিখিত কমান্ডটি চালিয়ে আরও সহায়তা পেতে পারেন:
go help build
এটি লক্ষণীয় যে, গো 1.5 এর সাথে শুরু go install
করা go build
( উত্স ) দ্বারা নির্মিত এক্সিকিউটেবলগুলিও সরিয়ে দেয় :
যদি 'গো ইনস্টল করুন' (কোনও যুক্তি ছাড়াই, বর্তমান ডিরেক্টরি অর্থ) সফল হয়, উপস্থিত থাকলে 'Go বিল্ড' দ্বারা লেখা এক্সিকিউটেবলকে সরিয়ে দিন। এটি একটি বাসি বাইনারি পিছনে রেখে এড়ানো ...
তালিকাটি সম্পূর্ণ করতে, go run
আপনার অ্যাপ্লিকেশনটিকে একটি অস্থায়ী ফোল্ডারে সংকলন করে এবং কার্যকর করা বাইনারি শুরু করে। অ্যাপটি প্রস্থান করার সময় এটি অস্থায়ী ফাইলগুলি সঠিকভাবে পরিষ্কার করে।
ডেভ চেনি এর দ্বারা অনুপ্রাণিত প্রশ্নটি বিল্ড বিল্ড কী করে?
প্যাকেজের জন্য:
go build
: আপনার প্যাকেজ তৈরি করে তারপরে ফলাফলগুলি বাতিল করে দেয়
গো 1.10 (Q1 2018) এর পরে এটি সত্য হবে না, সিএল 68116 এবং সিএল 75473 কে ধন্যবাদ । এই থ্রেডটি দেখুন , আমি এখানে উল্লেখ করছি।
ঠিক কী কাজ করে
go build
এবংgo install
কমান্ডগুলি তৈরি করেযখনই গো সরঞ্জাম কোনও প্যাকেজ বা বাইনারি ইনস্টল করে, এটি তার যে কোনও নির্ভরতা ইনস্টল করে, তাই চলমান গো ইনস্টল স্বয়ংক্রিয়ভাবে স্বয়ংক্রিয়ভাবে আপনার প্রোগ্রামের উপর নির্ভর করে (সর্বজনীনভাবে উপলব্ধ, "গেটে টেবিল" প্যাকেজগুলি) প্যাকেজগুলি ইনস্টল করে।
আসলে ... নতুন ক্যাশে ছাড়াওgo install
Go 1.10 এর সাথেও পরিবর্তন হবে :
"
go install
" কমান্ডটি আর নামযুক্ত প্যাকেজগুলির ( সিএল 75850 ) নির্ভরতা ইনস্টল করে না ।আপনি যদি "
go install foo
" চালনা করেন তবে কেবল ইনস্টল করা জিনিসfoo
।আগে, এটি বিভিন্ন ছিল। যদি নির্ভরতাগুলি পুরানো হয়ে থাকে তবে "
go install
" কোনও নির্ভরতাও ইনস্টল করে।
"go install
" এর সময় নির্ভরতাগুলির অন্তর্নিহিত ইনস্টলেশন ব্যবহারকারীর জন্য প্রচুর বিভ্রান্তি ও মাথা ব্যথার কারণ হয়ে দাঁড়ায়, তবে পূর্বে ইনক্রিমেন্টাল বিল্ডগুলি সক্ষম করা প্রয়োজন ছিল।
আর না.
আমরা মনে করি যে নতুনinstall what I said
শব্দার্থবিজ্ঞানগুলি অনেক বেশি বোধগম্য হবে, বিশেষত যেহেতু বাগ রিপোর্টগুলি থেকে এটি পরিষ্কার হয়েছে যে অনেক ব্যবহারকারী ইতিমধ্যে তাদের প্রত্যাশা করেছিলেন।
"go install
" চলাকালীন নির্ভরতা স্থাপনের জন্য জোর করতেgo install -i
, "go build -i
" এবং "go test -i
" এর সাথে উপমা দিয়ে নতুন " " ব্যবহার করুন ।যে
go install
কোনও পুনর্নির্মাণ নির্ভরতা ইনস্টল করতে " " ব্যবহৃত হত তা প্রায়শই একযোগে বিভ্রান্তির সৃষ্টি করে-a
যার অর্থ "force rebuild of all dependencies
"।
এখন, "go install -a myprog
" নিজেইmyprog
পাশাপাশি সমস্ত নির্ভরতার সম্পূর্ণ পুনর্নির্মাণকে বাধ্য করবেmyprog
, তবে কেবলmyprog
ইনস্টল হবে। (পুনর্নির্মাণ করা সমস্ত নির্ভরশীলতা অবশ্যই বিল্ড ক্যাশে সংরক্ষণ করা হবে, অবশ্যই।)
নতুন বিষয়বস্তু ভিত্তিক staleness বিশ্লেষণের সাথে একযোগে এই কেসটি আরও বোধগম্যভাবে করা বিশেষত গুরুত্বপূর্ণ, কারণ এটি পূর্বের তুলনায় প্রায়শই নির্ভরতা পুনর্নির্মাণের ভাল কারণ দেখায় , যা "আমার নির্ভরতা কেন ইনস্টল হল" বিভ্রান্তির পরিমাণ বাড়িয়ে তুলত।
উদাহরণস্বরূপ, যদি আপনি "go install -gcflags=-N myprog
" চালনা করেন তবে এটি একটি ইনস্টল করেmyprog
কোন সংকলক অপ্টিমাইজেশান সহ নির্মিত, তবে এটি আরmyprog
কম্পাইলার অপ্টিমাইজেশান ছাড়াই স্ট্যান্ডার্ড লাইব্রেরি থেকে প্যাকেজগুলি পুনরায় ইনস্টল করে না।
go build
, get
এস? আমি একটি বিল্ড ত্রুটি আছে cannot find package "github.com/spf13/cobra" in any of:…
। এটি পেতে কীভাবে এটি বলতে হয় তা আমি জানি না। আমার কি স্পষ্টভাবে পাওয়া দরকার?
go.mod
ফাইল আছে?
go version go1.11.4 linux/amd64
। আমি go.mod সম্পর্কে জানি না। আমি পুনঃনির্মাণ করছি https://github.com/cbroglie/mustache/blob/master/cmd/mustache/main.go
, এটি পুরোপুরি প্যাকেজটি তৈরি করার সাথে সাথে এটি অদ্ভুত this গোঁফ প্যাকেজ দিয়ে কীভাবে এটি ইনস্টল করা হয়নি তা আমি দেখতে পাচ্ছি না।