3 minute read

আপনি যদি গো নিয়ে কাজ করে থাকেন তাহলে অবশ্যই কোন না কোন প্যাকেজ ইতিমধ্যে ব্যবহার করে ফেলেছেন। যেমন fmt, fmt হচ্ছে একটা বিল্ট-ইন স্ট্যান্ডার্ড লাইব্রেরি/প্যাকেজ, এই লিঙ্কে গেলে গো’র বিল্ট-ইন প্যাকেজসমূহের লিস্ট পাবেন লিঙ্ক ।

এছাড়া কাজ করার সময় আমরা রিমোট প্যাকেজ ব্যবহার করে থাকি। যেমন মাই-এসকিউএল ডাটাবেজ নিয়ে কাজ করার জন্য github.com/go-sql-driver/mysql এই প্যাকেজটা ব্যবহার করা হয়ে থাকে।

তবে এর বাইরেও আমাদের নিজেদের প্রোজেক্টে নিজস্ব প্যাকেজ ব্যবহারের প্রয়োজন হয় বা হতে পারে। তো কিভাবে একটা নিজস্ব প্যাকেজ তৈরি এবং ব্যবহার করা যায় দেখা যাক। প্যাকেজ তৈরির আগে গো ওয়ার্কস্পেস এর কনভেনশনটা ফলো করা জরুরী। গো ওয়ার্কস্পেস সম্পর্কে ভাল আইডিয়া না থাকলে কিছুদিন আগে গো ওয়ার্কস্পেস নিয়ে একটা আর্টিকেল লিখেছি,জাস্ট আগের পোস্টটা দেখে নিতে পারেন।

আপনার ওয়ার্কস্পেস এর রুট ডিরেক্টরির নাম যদি gocode হয়, তবে এই ডিরেক্টরির মাঝখানে bin, pkg, src নামে তিনটা ডিরেক্টরি থাকবে। এখন আমাদের প্রোজেক্টএর নাম যদি হয় test তাহলে কনভেনশন অনুযায়ী সোর্স ডিরেক্টরির মাঝে github.com/monirz/test এই স্ট্রাকচারে ডিরেক্টরি ক্রিয়েট করতে হবে। যেখানে monirz হচ্ছে আমার গিটহাব ইউজারনেম অর্থাৎ এটা আপনার গিটহাব ইউজারনেম দিয়ে একটা ডিরেক্টরি হবে।

এখন number নামে একটা প্যাকেজ তৈরি করব যার মাঝে একটা ফাংশন থাকবে যার কাজ হল n’তম সিরিজের যোগফল রিটার্ন করা, তাহলে আমরা যদি number নামে একটা প্যাাকেজ তৈরি করতে চাই সেক্ষেত্রে test ডিরেক্টরির মাঝে number নামে একটা ডিরেক্টরি ক্রিয়েট করে এখানে number.go নামে একটা ফাইল ক্রিয়েট করুন।

package number

func Sum(n int) int {

s := (n * (n + 1)) / 2

return s
}

উপরের number.go ফাইলের কোড দেয়া হয়েছে। প্রথম লাইনটা একটা প্যাকেজ তৈরির জন্য ইম্পর্টেন্ট, এখানে আপনাকে আপনার প্যাকেজের নাম বলে দিতে হবে। এর পর আপনার ফাংশন সমুহ লিখবেন। আমি সিরিজের যোগফল রিটার্ন করার জন্য একটা Sum নামে একটা ফাংশন লিখেছি। এখানে একটা ব্যাপার অবশ্যই আপনাকে ফলো করতে হবে, প্যাকেজ ফাইলের ফাংশনের নাম অবশ্যই আপার-কেস হতে হবে। তাছাড়া ফাংশনটা আনএক্সপোর্টেড থেকে যাবে যার ফলে অন্য কোন প্যাকেজ থেকে আপনি এই ফাংশনটিকে কল করতে পারবেন না।

এই তো হয়ে গেছে আপনার প্যাকেজ তৈরি। নট ইয়েট!

প্যাকেজটাকে ব্যবহার করার জন্য একটা লাইব্রেরি ফাইল বানাতে হবে এর জন্য আপনাকে কিছুই করতে হবে না। জাস্ট টার্মিনালে গিয়ে number ডিরেক্টরিতে go install কমান্ডটা রান করুন। যদি কোন এরর না আসে তার মানে সব ঠিক আছে।

আপনার প্যাকেজটা তৈরি হয়েছে কিনা দেখতে চাইলে pkg/linux_amd64/github.com/username/test এই ডিরেক্টরিতে গেলে দেখতে পাবেন number.a নামে একটা লাইব্রেরি ফাইল তৈরি হয়েছে।

এবার প্যাকেজটাকে ব্যবহার করতে চাইলে ইম্পোর্টে প্যাকেজের এর নেমস্পেস দিয়ে দিতে হবে। উদাহরণস্বরূপ আমাদের মেইন প্রোজেক্ট যেহেতু ছিল test ডিরেক্টরিতে, সেক্ষেত্রে number ডিরেক্টরি থেকে বের হয়ে গিয়ে, টেস্ট ডিরেক্টরিতে main.go বা আপনার পছন্দমত নাম দিয়ে একটা ফাইল ক্রিয়েট করুন। এবার নিচের কোডটাতে প্যাকেজ ইম্পোর্টের নেমস্পেসটা খেয়াল করুন। এখানে আসলে আপনার প্যাকেজটা যে ডিরেক্টরিতে আছে সেটাই বলে দেয়া হয়েছে। সব কিছু ঠিক থাকলে একশ পর্যন্ত সিরিজের যোগফল প্রিন্ট করবে।

package main

import (
"fmt"
"github.com/monirz/test/number"
)

func main() {
fmt.Println(number.Sum(100))
}

এখন আপনি চাইলে প্যাকেজটিকে যেকোন প্রোজেক্টে ব্যবহার করতে পারবেন। জাস্ট প্যাকেজের নেমস্পেস ইম্পোর্ট করে নিতে হবে। আর একটা বিষয় খেয়াল রাখবেন গোপাথে যে ডিরেক্টরি দেয়া আছে প্যাকেজটা কিন্তু সেই ডিরেক্টরিতে ক্রিয়েট হবে। যেমন আমার গোপাথের রুট ডিরেক্টরি হল gocode । আপনার গোপাথ এর লোকেশন দেখতে চাইলে টার্মিনালে echo $GOPATH কমান্ডটা রান করে দেখতে পারেন।

comments powered by Disqus