ট্র্যাক
/
Go
Go
/
সিলেবাস
/
স্ট্রিংগার
স্

স্ট্রিংগার মধ্যে Go

১টি অনুশীলনী

স্ট্রিংগার সম্পর্কে

Stringer হলো একটি ইন্টারফেস, যা দিয়ে মানের স্ট্রিং ফরম্যাট নির্ধারণ করা যায়।

এই ইন্টারফেসে একটি মাত্র String মেথড থাকে:

type Stringer interface {
    String() string
}

যে টাইপগুলো এই ইন্টারফেসটি ইমপ্লিমেন্ট করতে চায়, তাদের অবশ্যই একটি String() মেথড থাকতে হবে, যা ওই টাইপের মানুষের বোঝার উপযোগী স্ট্রিং রূপ রিটার্ন করে। fmt প্যাকেজসহ আরও অনেক প্যাকেজ মান ফরম্যাট ও প্রিন্ট করার জন্য এই মেথডটিই খোঁজে।

উদাহরণ: দূরত্ব

ধরুন, আমরা এমন একটি অ্যাপ্লিকেশন নিয়ে কাজ করছি যা বিভিন্ন এককে মাপা ভৌগোলিক দূরত্ব নিয়ে কাজ করে। আমরা DistanceUnit ও Distance টাইপ দুটি এভাবে ডিফাইন করেছি:

type DistanceUnit int

const (
	Kilometer    DistanceUnit = 0
	Mile         DistanceUnit = 1
)

type Distance struct {
	number float64
	unit   DistanceUnit
}

উপরের উদাহরণে Kilometer ও Mile হলো DistanceUnit টাইপের কনস্ট্যান্ট।

String মেথড না থাকায় এই টাইপগুলো Stringer ইন্টারফেসটি ইমপ্লিমেন্ট করে না। তাই fmt-এর ফাংশনগুলো Go-এর "ডিফল্ট ফরম্যাট" ব্যবহার করে Distance মান প্রিন্ট করবে:

mileUnit := Mile
fmt.Sprint(mileUnit)
// => 1
// The result is '1' because that is the underlying value of the 'Mile' constant (see constant declarations above)

dist := Distance{number: 790.7, unit: Kilometer}
fmt.Sprint(dist)
// => {790.7 0}
// not a very useful output!

আউটপুটকে আরও তথ্যপূর্ণ করতে আমরা প্রতিটি টাইপে একটি String মেথড যোগ করে DistanceUnit ও Distance টাইপের জন্য Stringer ইন্টারফেসটি ইমপ্লিমেন্ট করি:

func (sc DistanceUnit) String() string {
	units := []string{"km", "mi"}
	return units[sc]
}

func (d Distance) String() string {
	return fmt.Sprintf("%v %v", d.number, d.unit)
}

fmt প্যাকেজের ফাংশনগুলো Distance মান ফরম্যাট করার সময় এই মেথডগুলো কল করবে:

kmUnit := Kilometer
kmUnit.String()
// => km

mileUnit := Mile
mileUnit.String()
// => mi

dist := Distance{
	number: 790.7,
	unit: Kilometer,
}
dist.String()
// => 790.7 km
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি নতুন একটি উইন্ডো বা ট্যাবে খুলবে

স্ট্রিংগার শিখুন