যদিও গৃহীত উত্তরটি প্যাকেজ নামের সাথে ডিরেক্টরিগুলি মিলানোর প্রয়োজন সম্পর্কে এখনও সঠিক তবে আপনাকে GOPATH ব্যবহার না করে গো মডিউলগুলি ব্যবহার করে সত্যই স্থানান্তর করতে হবে। নতুন ব্যবহারকারী যারা এই সমস্যার মুখোমুখি হন তারা GOPATH (যেমন আমি ছিলাম) ব্যবহারের উল্লেখ সম্পর্কে বিভ্রান্ত হতে পারেন, যা এখন পুরানো are সুতরাং, আমি এই সমস্যাটি পরিষ্কার করার চেষ্টা করব এবং গো মডিউলগুলি ব্যবহার করার সময় এই সমস্যাটি রোধ করার সাথে সম্পর্কিত দিকনির্দেশনা সরবরাহ করব।
আপনি যদি ইতিমধ্যে গো মডিউলগুলির সাথে পরিচিত হন এবং এই সমস্যাটি অনুভব করে থাকেন তবে নীচে আমার আরও সুনির্দিষ্ট বিভাগগুলিতে যান যা নীচে বা ভুলে যাওয়া সহজ যে কয়েকটি গো কনভেনশনগুলি কভার করে।
এই গাইড গো মডিউল সম্পর্কে শেখায়: https://golang.org/doc/code.html
গো মডিউল সহ প্রকল্প সংস্থা
একবার আপনি নিবন্ধে উল্লিখিত গো মডিউলগুলিতে স্থানান্তরিত হওয়ার পরে, বর্ণিত হিসাবে প্রকল্প কোডটি সংগঠিত করুন:
একটি সংগ্রহস্থলে এক বা একাধিক মডিউল থাকে। মডিউলটি সম্পর্কিত গো প্যাকেজগুলির সংকলন যা একসাথে প্রকাশিত হয় are একটি গো সংগ্রহস্থলটিতে সাধারণত কেবলমাত্র একটি মডিউল থাকে যা সংগ্রহস্থলের গোড়ায় অবস্থিত। সেখানে go.mod নামে একটি ফাইল মডিউলটির পথ ঘোষণা করে: মডিউলটির মধ্যে থাকা সমস্ত প্যাকেজের জন্য আমদানি পথের উপসর্গ। মডিউলটিতে ডিরেক্টরিতে প্যাকেজগুলি রয়েছে যার go.mod ফাইলের পাশাপাশি সেই ডিরেক্টরিটির উপ-ডিরেক্টরিগুলি রয়েছে, পরবর্তী govmod ফাইল (যদি থাকে) সহ পরবর্তী সাব-ডিরেক্টরিতে।
প্রতিটি মডিউলটির পাথ কেবল তার প্যাকেজগুলির জন্য আমদানি পথের উপসর্গ হিসাবে কাজ করে না, তবে এটি নির্দেশ করে যে গো কমান্ড এটি ডাউনলোড করতে হবে কিনা। উদাহরণস্বরূপ, golang.org/x/tools মডিউলটি ডাউনলোড করার জন্য, গো কমান্ড https://golang.org/x/tools দ্বারা নির্দেশিত ভাণ্ডারগুলির সাথে পরামর্শ করবে (এখানে আরও বর্ণিত)।
একটি আমদানি পথটি একটি প্যাকেজ আমদানির জন্য ব্যবহৃত একটি স্ট্রিং। একটি প্যাকেজের আমদানি পথ হ'ল মডিউলটির মডিউলটির মধ্যে এটির উপ-ডিরেক্টরিতে যোগ হয় within উদাহরণস্বরূপ, github.com/google/go-cmp মডিউলটি cmp / ডিরেক্টরিতে একটি প্যাকেজ ধারণ করে। এই প্যাকেজের আমদানি পথটি github.com/google/go-cmp/cmp। স্ট্যান্ডার্ড লাইব্রেরিতে প্যাকেজগুলির একটি মডিউল পাথ উপসর্গ নেই।
আপনি এইভাবে আপনার মডিউলটি শুরু করতে পারেন:
$ go mod init github.com/mitchell/foo-app
আপনার কোডটি তৈরি করতে এটির জন্য github.com এ থাকা দরকার নেই। তবে আপনার মডিউলগুলি এমনভাবে গঠন করা সর্বোত্তম অনুশীলন যা সেগুলি শেষ পর্যন্ত প্রকাশিত হবে।
প্যাকেজ পাওয়ার চেষ্টা করার পরে কী হয় তা বোঝা
এখানে একটি দুর্দান্ত নিবন্ধ রয়েছে যা আপনি যখন প্যাকেজ বা মডিউলটি পাওয়ার চেষ্টা করেন তখন কী ঘটে সে সম্পর্কে আলোচনা করে: https://medium.com/rungo/anatomy-of-modules-in-go-c8274d215c16
এটি কোথায় প্যাকেজটি সংরক্ষণ করা হবে এবং কী হবে তা আলোচনা করে আপনি যদি ইতিমধ্যে গো মডিউল ব্যবহার করেন তবে আপনি কেন এই ত্রুটিটি পাচ্ছেন তা বুঝতে আপনাকে সহায়তা করুন।
আমদানি করা ফাংশনটি রফতানি হয়েছে তা নিশ্চিত করুন
মনে রাখবেন যে অন্য কোনও ফাইল থেকে কোনও ফাংশনে অ্যাক্সেস পেতে আপনার যদি সমস্যা হয় তবে আপনার ফাংশনটি রফতানি করা হয়েছে তা নিশ্চিত করতে হবে। আমি সরবরাহ করা প্রথম লিঙ্কে বর্ণিত হিসাবে, একটি ফাংশন রফতানি করতে হবে এবং অন্য প্যাকেজগুলিতে আমদানির জন্য উপলভ্য করতে একটি বড় হাতের অক্ষর দিয়ে শুরু করতে হবে।
ডিরেক্টরি নাম
আর একটি সমালোচনামূলক বিবরণ (যেমন স্বীকৃত উত্তরে উল্লিখিত ছিল) হ'ল ডিরেক্টরিগুলির নামগুলিই আপনার প্যাকেজগুলির নাম নির্ধারণ করে। (আপনার প্যাকেজের নামগুলি তাদের ডিরেক্টরি নামের সাথে মেলে নেওয়া দরকার)) আপনি এর উদাহরণ এখানে দেখতে পাবেন: https://medium.com/rungo/everything-you-need-to-
ज्ञान- about- packages- in- go- b8bac62b74cc এর সাথে এটি বলেছিল যে আপনার main
পদ্ধতিযুক্ত ফাইল (অর্থাত আপনার আবেদনের প্রবেশের স্থান) এই প্রয়োজনীয়তা থেকে একরকম ছাড় exe
উদাহরণস্বরূপ, এই জাতীয় কাঠামো ব্যবহার করার সময় আমার আমদানিতে সমস্যা ছিল:
/my-app
├── go.mod
├── /src
├── main.go
└── /utils
└── utils.go
আমি utils
আমার main
প্যাকেজে কোডটি আমদানি করতে পারিনি ।
যাইহোক, একবার আমি main.go
এটির নিজের উপ-ডিরেক্টরিতে রেখেছি, যেমন নীচে দেখানো হয়েছে, আমার আমদানি ঠিক কাজ করেছে:
/my-app
├── go.mod
├── /src
├── /app
| └── main.go
└── /utils
└── utils.go
এই উদাহরণে, আমার go.mod ফাইলটি দেখতে এমন দেখাচ্ছে:
module git.mydomain.com/path/to/repo/my-app
go 1.14
আমি যখন একটি রেফারেন্স যুক্ত করার পরে main.go সংরক্ষণ করেছি utils.MyFunction()
, তখন আমার আইডিই স্বয়ংক্রিয়ভাবে আমার প্যাকেজের রেফারেন্সটি টানছে :
import "git.mydomain.com/path/to/repo/my-app/src/my-app"
(আমি গোলং এক্সটেনশান সহ ভিএস কোড ব্যবহার করছি))
লক্ষ্য করুন যে আমদানির পথে প্যাকেজের সাব-ডিরেক্টরি অন্তর্ভুক্ত রয়েছে।
একটি প্রাইভেট রেপো নিয়ে কাজ করছে
কোডটি যদি কোনও ব্যক্তিগত রেপোর অংশ হয় তবে অ্যাক্সেস সক্ষম করতে আপনাকে গিট কমান্ড চালানো দরকার। অন্যথায়, আপনি অন্যান্য ত্রুটিগুলির মুখোমুখি হতে পারেন এই নিবন্ধটিতে কীভাবে ব্যক্তিগত গিথুব, বিটবাকেট এবং গিটল্যাব রেপোগুলির জন্য এটি করবেন তা উল্লেখ করা হয়েছে: https://medium.com/cloud-native-the-gathering/go-modules-with-private-git- repositories-dfe795068db4
এই সমস্যাটি এখানেও আলোচনা করা হয়েছে: একটি ব্যক্তিগত সংগ্রহস্থল "পেতে" যাওয়ার সঠিক উপায় কী?