তিনটি বিন্দু (...) সহ উপস্থাপিত একটি প্যারামিটারকে ভেরিয়াদিক প্যারামিটার বলা হয় । তার অর্থ আপনি যে প্যারামিটারে (কোনও ঠিক তেমন) কোনও সংখ্যা বা তর্কগুলি পাস করতে পারেন fmt.Printf()
। ফাংশনটি প্যারামিটারের জন্য ঘোষিত ধরণের টুকরো হিসাবে প্যারামিটারের জন্য আর্গুমেন্টের তালিকা পাবেন ( []interface{}
আপনার ক্ষেত্রে)। যান স্পেসিফিকেশন পদ বলে:
একটি ফাংশন স্বাক্ষরের চূড়ান্ত প্যারামিটারটির একটি প্রিফিক্সযুক্ত প্রাইস থাকতে পারে .... এই জাতীয় পরামিতি সহ একটি ফাংশনটিকে ভেরিয়াদিক বলা হয় এবং সেই পরামিতির জন্য শূন্য বা আরও বেশি যুক্তি যুক্ত করা যেতে পারে।
একটি প্যারামিটার:
a ...interface{}
এর সমতুল্য ফাংশনের জন্য:
a []interface{}
পার্থক্যটি হল আপনি কীভাবে এই জাতীয় ফাংশনে যুক্তিগুলি পাস করেন। এটি হয় স্লাইসের প্রতিটি উপাদান পৃথকভাবে দেওয়া বা একক স্লাইস হিসাবে, এক্ষেত্রে আপনাকে তিনটি বিন্দুর সাথে স্লাইস-মানটি যুক্ত করতে হবে। নিম্নলিখিত উদাহরণগুলির ফলে একই কল আসবে:
fmt.Println("First", "Second", "Third")
যেমনটি করবে:
s := []interface{}{"First", "Second", "Third"}
fmt.Println(s...)
এটি গো স্পেসিফিকেশনেও বেশ ভালভাবে ব্যাখ্যা করা হয়েছে :
ফাংশন এবং কল দেওয়া হয়েছে
func Greeting(prefix string, who ...string)
Greeting("nobody")
Greeting("hello:", "Joe", "Anna", "Eileen")
এর মধ্যে Greeting
, প্রথম কলটিতে এবং দ্বিতীয়টিতে who
মান হবে ।nil
[]string{"Joe", "Anna", "Eileen"}
যদি চূড়ান্ত যুক্তি কোনও স্লাইস টাইপের জন্য নির্ধারিত হয়, তর্কটি অনুসরণ করা হলে এটি প্যারামিটারের []T
মান হিসাবে অপরিবর্তিত হতে পারে । এই ক্ষেত্রে কোনও নতুন স্লাইস তৈরি করা হয় না।...T
...
স্লাইস s
এবং কল দেওয়া
s := []string{"James", "Jasmine"}
Greeting("goodbye:", s...)
মধ্যে Greeting
, who
মানের সমান থাকবে s
একই অন্তর্নিহিত অ্যারের সঙ্গে।