… ইন্টারফেস Meaning} এর অর্থ (ডট ডট ডট ইন্টারফেস)


96

নীচে আমার কাছে গো কোডের একটি অংশ রয়েছে about বিশেষত, aএই ফাংশনটি কী?

func DPrintf(format string, a ...interface{}) (n int, err error) {
  if Debug > 0 {
    n, err = fmt.Printf(format, a...)
  }
  return
}

তিনটি বিন্দু এখানে কি কেউ আমাকে বলতে পারে? এবং কি করে ...interface{}?


33
ডটডটটকে এলিপসিস বলা হয়।
এরিকউ

উত্তর:


166

তিনটি বিন্দু (...) সহ উপস্থাপিত একটি প্যারামিটারকে ভেরিয়াদিক প্যারামিটার বলা হয় । তার অর্থ আপনি যে প্যারামিটারে (কোনও ঠিক তেমন) কোনও সংখ্যা বা তর্কগুলি পাস করতে পারেন 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একই অন্তর্নিহিত অ্যারের সঙ্গে।


10

interface{}শব্দটি হিসাবে এটি খালি ইন্টারফেস। অন্য কথায়, গোটিতে সমস্ত ভেরিয়েবল দ্বারা প্রয়োগ করা ইন্টারফেস।

এটি সি # java.lang.Objectবা এর সাথে একরকম উপমা System.Object, তবে পরিবর্তে ভাষার প্রতিটি পরিবর্তনশীল ধরণের অন্তর্ভুক্ত। সুতরাং এটি আপনাকে পদ্ধতিতে যে কোনও কিছুতে পাস করতে দেয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.