গো এবং = অপারেটরগুলির মধ্যে পার্থক্য


283

অপারেটরগুলির মধ্যে পার্থক্য কী =এবং :=তাদের ব্যবহারের ক্ষেত্রে কী কী? তারা উভয়ই কোনও কার্যভারের জন্য বলে মনে হচ্ছে?


2
এটিও দেখুন : যান ভেরিয়েবল ভিজ্যুয়াল গাইড । আমি এটি সম্পর্কে একটি নিবন্ধ লিখেছিলাম।
Inanc Gumus

1
শব্দার্থবিজ্ঞান ...
জাস্টডেভ

আপনি যদি একটি নির্দিষ্ট ধরণের ব্যবহার করতে চান x := uint32(123)উদাহরণস্বরূপ। এটি বেশিরভাগ মানুষের কাছে অবশ্যই স্পষ্ট হওয়া উচিত তবে আমাকে কয়েক মিনিট ভাবতে হয়েছিল ;-)
কেনজি নোগুচি

উত্তর:


198

কেবলমাত্র =অ্যাসাইনমেন্ট অপারেটর।

:=শর্ট ভেরিয়েবল ডিক্লেয়ারেশন ক্লজের সিনট্যাক্সের একটি অংশ ।

Some যদিও কিছু বিধি আছে। দেখুন এই অন্য উত্তর আরো বিস্তারিত জানার জন্য।


সুতরাং এটির কি অনুমানযোগ্য ধরণের সাথে পরিবর্তনশীল বোঝানো যায়? ঠিক আছে?
কৃপাল শাহ

@ কৃপালশাহ ডক্সের লিঙ্কটি আক্ষরিকভাবে বলেছে যে - "ইনিশিয়ালার এক্সপ্রেশন দিয়ে নিয়মিত পরিবর্তনশীল ঘোষণার জন্য এটি সংক্ষিপ্ত, তবে কোনও ধরণের নয়:" গোলংআরগ.আর.এফ
স্পেক

1
দেখে মনে হচ্ছে :=এখানে অপারেটর হিসাবে তালিকাভুক্ত হয়েছে golang.org/ref/spec# অপারেটর_আর_পঞ্চাঙ্কন , সুতরাং আমি নিশ্চিত যে আমি " :=আসলেই অপারেটর নন " এর সাথে সম্মত নই
পাওয়ারস

347

গো-তে, :=ঘোষণা + অ্যাসাইনমেন্টের জন্য, তবে =কেবলমাত্র অ্যাসাইনমেন্টের জন্য।

উদাহরণস্বরূপ, var foo int = 10 হিসাবে একই foo := 10


4
এর =বিপরীতে কোনও ব্যবহারের মামলা রয়েছে কি :=? আপনি কি সবসময় ব্যবহার করা উচিত :=?
কেনি ওয়ার্ডেন

3
@ কেনেথ ওয়ার্ডেন গো আপনাকে :=এমন একটি ভেরিয়েবল বরাদ্দ করতে দেবে না যা ইতিমধ্যে ঘোষিত হয়েছে, যদি না আপনি একবারে একাধিক ভেরিয়েবলকে অর্পণ করেন এবং এর মধ্যে কমপক্ষে একটি ভেরিয়েবল নতুন।
কেনি বানিয়া

5
intপ্রয়োজন নেই, var foo = 10একই হিসাবেfoo := 10
গ্যারি লিন

@ কেনি ওয়ার্ডেন, হ্যাঁ আপনি ব্যবহার করতে পারবেন না: = কোনও ফাংশনের বাইরে।
করুহঙ্গা

105

অন্যরা :=যেমন ইতিমধ্যে ব্যাখ্যা করেছে, ঘোষণা, কার্যনির্বাহী এবং পুনঃ ঘোষণার জন্য উভয়ই; এবং এটি ভেরিয়েবলের ধরণটি স্বয়ংক্রিয়ভাবে অনুমান করে ( ইনফার্স করে )।

উদাহরণস্বরূপ, foo := 32এর একটি স্বল্প হাত ফর্ম:

var foo int
foo = 32

// OR:
var foo int = 32

// OR:
var foo = 32

/ * কিছু নিয়ম রয়েছে: * /

★ প্রথম বিধি:

আপনি এর :=বাইরে ব্যবহার করতে পারবেন না funcs। এটি কারণ, কোনও মজাদার বাইরে, একটি বিবৃতি একটি কীওয়ার্ড দিয়ে শুরু করা উচিত।

// no keywords below, illegal.
illegal := 42

// `var` keyword makes this statement legal.
var legal = 42

func foo() {
  alsoLegal := 42
  // reason: it's in a func scope.
}

★ দ্বিতীয় বিধি:

আপনি এগুলি দু'বার ব্যবহার করতে পারবেন না ( একই ক্ষেত্রের মধ্যে ):

legal := 42
legal := 42 // <-- error

কারণ, "একটি নতুন ভেরিয়েবল":= প্রবর্তন করে, সুতরাং এটির দু'বার ব্যবহার করা দ্বিতীয় ভেরিয়েবলটিকে পুনরায় বিবরণ দেয় না, সুতরাং এটি অবৈধ।


★ তৃতীয় বিধি:

আপনি এগুলি বহু-পরিবর্তনশীল ঘোষণা এবং কার্যভারের জন্য ব্যবহার করতে পারেন:

foo, bar   := 42, 314
jazz, bazz := 22, 7

Th চতুর্থ বিধি (পুনঃনির্মাণ):

আপনি এগুলি দুটি "বহু-ভেরিয়েবল" ঘোষণায় ব্যবহার করতে পারেন , যদি ভেরিয়েবলগুলির মধ্যে একটি নতুন হয় :

foo, bar  := someFunc()
foo, jazz := someFunc()  // <-- jazz is new
baz, foo  := someFunc()  // <-- baz is new

এটি বৈধ, কারণ, আপনি সমস্ত ভেরিয়েবলের ঘোষণা দিচ্ছেন না, আপনি কেবল বিদ্যমান ভেরিয়েবলগুলিতে নতুন মানগুলি পুনরায় অর্পণ করছেন এবং একই সাথে নতুন ভেরিয়েবলগুলি ঘোষণা করছেন। একে রিডিক্লারেশন বলা হয় ।


★ 5 তম বিধি:

আপনি নতুন স্কোপে ভেরিয়েবল ঘোষণার জন্য সংক্ষিপ্ত ঘোষণাটি ব্যবহার করতে পারেন এমনকি ভেরিয়েবলটি ইতিমধ্যে একই নামের সাথে আগেই ঘোষিত হয়েছে:

var foo int = 34

func some() {
  // because foo here is scoped to some func
  foo := 42  // <-- legal
  foo = 314  // <-- legal
}

এখানে, foo := 42আইনগত, কারণ, এটা ঘোষণা করা হয় foosome()func এর সুযোগ। foo = 314আইনী, কারণ এটি কেবলমাত্র একটি নতুন মান নির্ধারণ করে foo


★ ষষ্ঠ বিধি:

আপনি সংক্ষিপ্ত বিবৃতি ব্লকগুলিতে একই নামটি ঘোষণা করতে পারেন: যদি , জন্য , স্যুইচ করুন :

foo := 42
if foo := someFunc(); foo == 314 {
  // foo is scoped to 314 here
  // ...
}
// foo is still 42 here

কারণ, fooইন if foo := ..., কেবলমাত্র সেই ifধারাটির অন্তর্ভুক্ত এবং এটি একটি অন্য ক্ষেত্রের মধ্যে।


সুতরাং, একটি সাধারণ নিয়ম হিসাবে: আপনি যদি সহজেই কোনও ভেরিয়েবলটি ঘোষণা করতে চান তবে আপনি ব্যবহার করতে পারেন :=বা আপনি যদি কেবল বিদ্যমান ভেরিয়েবলটি ওভাররাইট করতে চান তবে আপনি ব্যবহার করতে পারেন =

তথ্যসূত্র:


21

:= ঘোষণার জন্য একটি স্বল্প হাত।

a := 10
b := "gopher"

aএকটি স্ট্রিং হিসাবে ঘোষিত হবে intএবং মান দিয়ে আরম্ভ হবে 10যেখানে মান হিসাবে একটি হিসাবে ঘোষণা করা হবে এবং প্রাথমিক করা bহবে gopher

তাদের সমতুল্য ব্যবহার করা =হবে

var a = 10
var b = "gopher"

=এসাইনমেন্ট অপারেটর। আপনি অন্য যে কোনও ভাষায় এটি ব্যবহার করুন ঠিক একইভাবে এটি ব্যবহার করা হয়।

আপনি যখন ভেরিয়েবল ঘোষণা করেন এবং প্রারম্ভকালীন উপস্থিত থাকে তখন আপনি প্রকারটি বাদ দিতে পারেন ( http://tour.golang.org/#11 )।


«= হ'ল এসাইনমেন্ট অপারেটর। আপনি অন্য যে কোনও ভাষায় এটি ব্যবহার করুন ঠিক একইভাবে এটি ব্যবহার করা হয় » অ্যাডা ব্যতীত যেখানে =কেবল তুলনার জন্য এবং :=কার্যনির্বাহের জন্য ...
অ্যালেক্সিস উইল্ক


11

:=ঘোষণা এবং বরাদ্দ, =কেবল বরাদ্দ

আপনি যখন কোড বা স্ট্রাক্ট ঘোষণার মাধ্যমে আপনার কোড পূরণ করতে চান না তখন এটি কার্যকর।

// Usage with =
var i int
var U, V, W float64
var k = 0
var x, y float32 = -1, -2

// Usage with :=
i, j := 0, 10
f := func() int { return 7 }
ch := make(chan int)

7

রেফারেন্স ডক থেকে: ( ট্যুর.আলংআরগ.org )

একটি ফাংশনের অভ্যন্তরে , :=সংক্ষিপ্ত অ্যাসাইনমেন্ট স্টেটমেন্টটি অন্তর্ভুক্ত প্রকারের সাথে কোনও ভ্যারো ডিক্লেয়ারেশনের জায়গায় ব্যবহার করা যেতে পারে।

একটি ফাংশনের বাইরে , প্রতিটি নির্মাণ একটি কীওয়ার্ড (var, func, এবং আরও) দিয়ে শুরু হয় এবং: = নির্মাণ উপলভ্য নয়।



2

উভয়ই গো ভাষায় পরিবর্তনশীল ঘোষণার বিভিন্ন কৌশল।

var firstName = "John" // is a variable declaration 

এবং

firstName := "John"   // is a short variable declaration. 

একটি সংক্ষিপ্ত ভেরিয়েবল ডিক্লেয়ারেশন হ'ল প্রারম্ভিক প্রকাশের সাথে নিয়মিত পরিবর্তনশীল ঘোষণার জন্য একটি শর্টহ্যান্ড তবে কোনও প্রকার নয়।

বিস্তারিত জানার জন্য নীচে পড়ুন:

পরিবর্তনশীল ঘোষণা

সংক্ষিপ্ত পরিবর্তনশীল ঘোষণা


10
আমি মনে করি আপনার প্রথম বাক্সটির বাক্য গঠন ভুল। পরিবর্তে: var firstName: = "জন", এটি হওয়া উচিত: var ফার্স্টনাম = "জন"
জিনো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.