1. সাধারণ স্ট্রিং
"সরল" স্ট্রিংগুলির জন্য (সাধারণত কোন লাইনে ফিট করে) সবচেয়ে সহজ সমাধানটি ব্যবহার করা হয় fmt.Sprintf()
এবং বন্ধুরা ( fmt.Sprint()
, fmt.Sprintln()
)। এগুলি স্টার্টার S
লেটার ছাড়াই ফাংশনের সাথে সাদৃশ্যযুক্ত , তবে এই Sxxx()
রূপগুলি ফলাফল হিসাবে ফিরে আসেstring
স্ট্যান্ডার্ড আউটপুটে মুদ্রণের পরিবর্তে ।
উদাহরণ স্বরূপ:
s := fmt.Sprintf("Hi, my name is %s and I'm %d years old.", "Bob", 23)
ভেরিয়েবলটি s
মান দিয়ে শুরু করা হবে:
Hi, my name is Bob and I'm 23 years old.
টিপ: আপনি যদি কেবল বিভিন্ন ধরণের মানগুলিকে একত্রিত করতে চান তবে আপনাকে স্বয়ংক্রিয়ভাবে ব্যবহারের প্রয়োজন হবে না Sprintf()
(যার জন্য বিন্যাসের স্ট্রিং দরকার) Sprint()
ঠিক যেমনটি হয়। এই উদাহরণটি দেখুন:
i := 23
s := fmt.Sprint("[age:", i, "]") // s will be "[age:23]"
কেবলমাত্র সংক্ষিপ্তকরণের জন্য string
, আপনি strings.Join()
যেখানে কাস্টম বিভাজক নির্দিষ্ট করতে পারবেন তা ব্যবহার করতে পারেন string
(যুক্ত হওয়ার জন্য স্ট্রিংগুলির মধ্যে স্থাপন করতে হবে)।
এগুলি গো খেলার মাঠে চেষ্টা করুন ।
২. জটিল স্ট্রিং (নথি)
আপনি যে স্ট্রিংটি তৈরি করার চেষ্টা করছেন তা যদি আরও জটিল হয় (যেমন একটি বহু-লাইন ইমেল বার্তা), fmt.Sprintf()
কম পঠনযোগ্য এবং কম দক্ষ হয় (বিশেষত যদি আপনাকে এটি বেশ কয়েকবার করতে হয়)।
এর জন্য স্ট্যান্ডার্ড লাইব্রেরি প্যাকেজগুলি সরবরাহ করে text/template
এবং html/template
। এই প্যাকেজগুলি পাঠ্য আউটপুট উত্পন্ন করার জন্য ডেটা-চালিত টেম্পলেট প্রয়োগ করে। html/template
কোড ইনজেকশন বিরুদ্ধে নিরাপদ এইচটিএমএল আউটপুট উত্পাদন জন্য। এটি প্যাকেজের মতো একই ইন্টারফেস সরবরাহ করে text/template
এবং text/template
যখনই আউটপুট এইচটিএমএল হয় তার পরিবর্তে ব্যবহার করা উচিত ।
template
মূলত প্যাকেজগুলি ব্যবহার করার জন্য আপনাকে কোনও string
মান আকারে স্ট্যাটিক টেম্পলেট সরবরাহ করতে হয় (যা কেবলমাত্র ফাইলের নাম দিয়ে থাকে এমন একটি ফাইল থেকে উদ্ভূত হতে পারে) যেখানে স্থির পাঠ্য থাকতে পারে এবং যে ক্রিয়াগুলি প্রক্রিয়া করা হয় এবং কার্যকর করা হয় তখন ইঞ্জিন টেম্পলেট প্রক্রিয়া করে এবং আউটপুট উত্পন্ন করে।
আপনি স্ট্যাটিক টেম্পলেট অন্তর্ভুক্ত / প্রতিস্থাপিত এবং আউটপুট উত্পাদন প্রক্রিয়া নিয়ন্ত্রণ করতে পারে যা পরামিতি সরবরাহ করতে পারেন। এই জাতীয় প্যারামিটারগুলির সাধারণ ফর্মগুলি হল struct
ও map
মান যা নেস্টেড হতে পারে।
উদাহরণ:
উদাহরণস্বরূপ বলা যাক আপনি ইমেল বার্তাগুলি তৈরি করতে চান যা দেখতে এরকম দেখাচ্ছে:
Hi [name]!
Your account is ready, your user name is: [user-name]
You have the following roles assigned:
[role#1], [role#2], ... [role#n]
এটির মতো ইমেল বার্তা সংস্থা তৈরি করতে, আপনি নিম্নলিখিত স্ট্যাটিক টেম্পলেট ব্যবহার করতে পারেন:
const emailTmpl = `Hi {{.Name}}!
Your account is ready, your user name is: {{.UserName}}
You have the following roles assigned:
{{range $i, $r := .Roles}}{{if $i}}, {{end}}{{.}}{{end}}
`
এবং এটি কার্যকর করার জন্য এর মতো ডেটা সরবরাহ করুন:
data := map[string]interface{}{
"Name": "Bob",
"UserName": "bob92",
"Roles": []string{"dbteam", "uiteam", "tester"},
}
সাধারণত টেমপ্লেটগুলির আউটপুট একটিতে লেখা হয় io.Writer
, সুতরাং আপনি যদি ফলাফল হিসাবে a চান string
, একটি তৈরি করুন এবং লিখুন bytes.Buffer
(যা প্রয়োগগুলি io.Writer
)। টেমপ্লেট কার্যকর করা এবং ফলাফল হিসাবে string
:
t := template.Must(template.New("email").Parse(emailTmpl))
buf := &bytes.Buffer{}
if err := t.Execute(buf, data); err != nil {
panic(err)
}
s := buf.String()
এর ফলে প্রত্যাশিত আউটপুট হবে:
Hi Bob!
Your account is ready, your user name is: bob92
You have the following roles assigned:
dbteam, uiteam, tester
এটি গো খেলার মাঠে চেষ্টা করুন ।
এছাড়াও মনে রাখবেন যান 1.10, যেহেতু একটি নতুন, দ্রুত, আরো বিশেষ বিকল্প উপলব্ধ করার জন্য bytes.Buffer
যা হল: strings.Builder
। ব্যবহার খুব অনুরূপ:
builder := &strings.Builder{}
if err := t.Execute(builder, data); err != nil {
panic(err)
}
s := builder.String()
এই একটি ব্যবহার করে দেখুন যান খেলার মাঠ ।
দ্রষ্টব্য: আপনি যদি os.Stdout
লক্ষ্য হিসাবে সরবরাহ করেন (যা প্রয়োগ করে io.Writer
): আপনি কোনও টেম্পলেট কার্যকরকরণের ফলাফলও প্রদর্শন করতে পারেন :
t := template.Must(template.New("email").Parse(emailTmpl))
if err := t.Execute(os.Stdout, data); err != nil {
panic(err)
}
এটি ফলাফল সরাসরি লিখতে হবে os.Stdout
। এই ব্যবহার করে দেখুন যান খেলার মাঠ ।