গোলাঙে [] স্ট্রিং এবং ... স্ট্রিংয়ের মধ্যে পার্থক্য কী?


85

গো ভাষায়,

[]string একটি স্ট্রিং অ্যারে

এবং আমরা ...stringপ্যারামিটার হিসাবেও ব্যবহার করি ।

পার্থক্য কি?

ফাংশন সংজ্ঞা:

func f(args ...string) {}

আমি কি এই ফাংশনটি নীচের মতো কল করতে পারি?

args := []string{"a", "b"}

f(args)

উত্তর:


126

[]string একটি স্ট্রিং অ্যারে

প্রযুক্তিগতভাবে এটি একটি স্লাইস যা অন্তর্নিহিত অ্যারের উল্লেখ করে

এবং আমরা ...stringপ্যারামিটার হিসাবেও ব্যবহার করি ।

পার্থক্য কি?

কাঠামোর প্রতি শ্রদ্ধা সহ, কিছুই আসলে। উভয় সিনট্যাক্সের ফলে প্রাপ্ত ডেটা টাইপ একই।

...পরামিতি সিনট্যাক্স একটি variadic প্যারামিটার করে তোলে। এটি শূন্য বা আরও বেশি stringআর্গুমেন্ট গ্রহণ করবে এবং এগুলিকে স্লাইস হিসাবে উল্লেখ করবে।

কলিংয়ের প্রতি শ্রদ্ধার সাথে fআপনি নীচের সিনট্যাক্সের সাহায্যে স্ট্রাইজের একটি টুকরোটি বৈকল্পিক প্যারামিটারে পাস করতে পারেন:

func f(args ...string) {
    fmt.Println(len(args))
}


args := []string{"a", "b"}

f(args...)

এই সিনট্যাক্সটি আক্ষরিক সিনট্যাক্স ব্যবহার করে নির্মিত স্লাইস, বা ভ্যারিয়্যাডিক প্যারামিটারের প্রতিনিধিত্বকারী স্লাইসের জন্য উপলব্ধ (যেহেতু তাদের মধ্যে আসলে কোনও পার্থক্য নেই)

http://play.golang.org/p/QWmzgIWpF8


10
[]stringএকটি স্লাইস, একটি অ্যারে নয়। একটি অ্যারে এবং স্লাইসের মধ্যে পার্থক্যগুলি সূক্ষ্ম তবে গুরুত্বপূর্ণ।
স্টিফেন ওয়েইনবার্গ

@ স্টেফেনউইনবার্গ: হ্যাঁ, "পার্থক্য কী" উদ্ধৃতিটির আমার "সত্যিকার অর্থে কিছুই নেই" উত্তরটি ভ্যারিয়েডিক ফাংশন প্যারামিটার দ্বারা উত্পন্ন স্লাইসের মধ্যে পার্থক্য সম্পর্কে জিজ্ঞাসা করা প্রশ্নের, এবং []stringবাক্য গঠন ব্যবহার করে তৈরি করা প্রশ্নের উত্তর দিচ্ছে । এটি পরিষ্কার করার জন্য আমি আমার উত্তরে আরও উদ্ধৃতি যুক্ত করব। :-)
আমি অলস ঘৃণা করি

@ আইহ্যাটলজি এলিসিস দিয়ে বিল্টিনের printlnকাজ করার কোনও উপায় আছে কি ? এখানে আপনি আমার পরীক্ষাগুলি খুঁজে পেতে পারেন। যদি কেউ কিছু ডিবাগ মুদ্রণ ফাংশন চান তবে আমার প্লেগাউন্ডটি দেখুন।
ভল্ট

14

উভয়ই স্ট্রিংগুলির একটি অ্যারে তৈরি করে তবে পার্থক্য কীভাবে এটি বলা হয় তার মধ্যে।

func f(args ...string) {

}
// Would be called like this:

f("foo","bar","baz");

এটি আপনাকে একটি পরিবর্তনশীল সংখ্যক আর্গুমেন্ট গ্রহণ করতে দেয় (একই ধরণের সমস্ত)

এর একটি দুর্দান্ত উদাহরণ হ'ল fmt.Printএবং বন্ধুরা, যা আপনি চান যত কম বা তত বেশি যুক্তি গ্রহণ করতে পারে।


আমি কোনও গো বিশেষজ্ঞ নই, তবে একটি বৈচিত্রপূর্ণ আর্গুমেন্ট এবং অন্যটি একক অ্যারে যুক্তি নয়, এবং অন্য ভাষার মতো দুটি পৃথক নয় কি?
অরবিটে

4
নিবন্ধন করুন যদি তা পরিষ্কার না হয় তবে বিভ্রান্তির জন্য দুঃখিত। উভয়ই অ্যারে তৈরি সম্পর্কে প্রথম লাইনটির অর্থ হ'ল উভয় ক্ষেত্রে ফলাফলের যুক্তিটি একটি অ্যারে an পাইথন def fn(*args)নির্মাণের সাথে এটি প্রায় অভিন্ন ।
টাইলার

সুতরাং গো একটি অ্যারের ধরণের উদাহরণ হিসাবে বহিরাগত যুক্তিগুলি প্রকাশ করে? এটাই আনন্দদায়ক।
অরবিটে

প্রকৃতপক্ষে তারা উভয় একটি অ্যারে নয়, একটি স্ট্রিংয়ের টুকরো তৈরি করে। তারা গোলংয়ের বিভিন্ন জিনিস।
পয়েন্টারটোসনস্ট্যান্টচার

উভয়ই স্ট্রিংয়ের একটি "অ্যারে" তৈরি করে না, তারা স্ট্রিংয়ের একটি "স্লাইস" তৈরি করে।
Inanc Gumus


1

এটি আপনার ফাংশন পরামিতিগুলি সহজ করে। এখানে একটি উদাহরণ ( https://play.golang.org/p/euMuy6IvaM ): পদ্ধতি SampleEllipsis শূন্য থেকে একই ধরণের অনেক পরামিতি কিন্তু পদ্ধতি SampleArray এটা বাধ্যতামূলক গ্রহণ args ঘোষিত হবে।

package main

import "fmt"

func SampleEllipsis(args ...string) {
    fmt.Printf("Sample ellipsis : %+v\n",args)
}


func SampleArray(args []string) {
    fmt.Println("Sample array ")
    SampleEllipsis(args...)
}

func main() {
    // Method one
    SampleEllipsis([]string{"A", "B", "C"}...)
    // Method two
    SampleEllipsis("A", "B", "C")
    // Method three
    SampleEllipsis()

    // Simple array
    SampleArray([]string{"A", "B", "C"})

    // Simple array
    SampleArray([]string{})

}

রিটার্নস:

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