এর বাম দিকে কোনও নতুন ভেরিয়েবল নেই: =


104

এখানে কি হচ্ছে?

package main

import "fmt"

func main() {

    myArray  :=[...]int{12,14,26}  ;     
    fmt.Println(myArray)

    myArray  :=[...]int{11,12,14} //error pointing on this line 

    fmt.Println(myArray) ;

}

এটি একটি ত্রুটি ছুড়ে দেয় যা বলে

no new variables on left side of :=

আমি যা করছি তা হ'ল একটি ঘোষিত ভেরিয়েবলের মানগুলি পুনরায় বরাদ্দ করা।


চেষ্টা করুনmyArray,x = [...]int{11,12,14},3
মিঃ লু

উত্তর:


138

colon :আপনি বিদ্যমান ভেরিয়েবলের জন্য একটি নতুন মান নির্ধারণ করার সাথে সাথে দ্বিতীয় বিবৃতিটি থেকে সরান ।

myArray = [...]int{11,12,14}

colon :ব্যবহার করা হয় যখন আপনি ছোট ঘোষণা এবং প্রথম বারের জন্য নিয়োগ সঞ্চালন হিসাবে আপনি আপনার প্রথম বিবৃতি অর্থাৎ করছেন myArray :=[...]int{12,14,26}


26

যেতে :=ও যেতে দুই ধরণের অ্যাসাইনমেন্ট অপারেটর রয়েছে =। এগুলি শব্দার্থগতভাবে সমতুল্য (কার্যভারের ক্ষেত্রে) তবে প্রথমটি একটি "সংক্ষিপ্ত পরিবর্তনশীল ঘোষণা" ( http://golang.org/ref/spec#Short_variable_declations ) যার অর্থ বাম দিক থেকে আমাদের কমপক্ষে একটি হওয়া দরকার এটি সঠিক হওয়ার জন্য নতুন পরিবর্তনশীল ঘোষণা decla

আপনি দ্বিতীয়টিকে একটি সাধারণ কার্যনির্বাহী বিবৃতিতে পরিবর্তন করতে পারেন :=-> =বা আপনার অ্যালগরিদমের সাথে ঠিক থাকলে আপনি নতুন ভেরিয়েবল ব্যবহার করতে পারেন।


এবং :=ব্যবহার করা যাবে না _? উদাহরণস্বরূপ_ := someFunc()
stt106

7

পার্শ্ব নোট হিসাবে, পুনরায় ঘোষণাগুলি কেবল একটি বহু-পরিবর্তনশীল সংক্ষিপ্ত ঘোষণায় উপস্থিত হতে পারে

ভাষা নির্দিষ্টকরণ থেকে উদ্ধৃতি:

নিয়মিত ভেরিয়েবল ঘোষণার বিপরীতে, একটি সংক্ষিপ্ত পরিবর্তনশীল ঘোষণা ভেরিয়েবলগুলি পুনরায় ঘোষিত করতে পারে যদি তারা একই ধরণের একই ব্লকটিতে প্রাথমিকভাবে ঘোষণা করা হয়েছিল এবং ফাঁকা ভেরিয়েবলের অন্তত একটি নতুন হয়। ফলস্বরূপ, পুনরায় ঘোষণাগুলি কেবল একটি বহু-পরিবর্তনশীল সংক্ষিপ্ত ঘোষণায় উপস্থিত হতে পারে। পুনঃ ঘোষণাপত্র একটি নতুন ভেরিয়েবল প্রবর্তন করে না; এটি কেবল আসলটিকে একটি নতুন মান নির্ধারণ করে।

package main

import "fmt"


func main() {
    a, b := 1, 2
    c, b := 3, 4

    fmt.Println(a, b, c)
}

গোলাংয়ে ভেরিয়েবলগুলির পুনঃ ঘোষণার বিষয়ে এখানে খুব ভাল উদাহরণ দেওয়া হয়েছে: https://stackoverflow.com/a/27919847/4418897


নোটের জন্য ধন্যবাদ। আমি একটি বহু-পরিবর্তনশীল সংক্ষিপ্ত ঘোষণায় বিভ্রান্ত হয়েছি, এটি কেন তা ব্যাখ্যা করে।
লি জিন্যাও

7
myArray  :=[...]int{12,14,26}

পূর্ববর্তী মন্তব্যকারীদের হিসাবে বলা হয়েছে, :=হ'ল এক ধরণের স্বল্প হাত এবং / অথবা পরিবর্তনশীল ঘোষণার স্বল্প-রূপ ।

সুতরাং উপরের বিবৃতিতে আপনি দুটি জিনিস করছেন।

  1. আপনি আপনার ভেরিয়েবলটি আমারআরে হিসাবে ঘোষণা করছেন
  2. আপনি আমারআরে ভেরিয়েবলের জন্য একটি পূর্ণসংখ্যার অ্যারে নির্ধারণ করছেন

আপনার কোডের দ্বিতীয় অংশটি ব্যর্থ হয়েছে, কারণ আপনি এখানে যা করছেন:

myArray  :=[...]int{11,12,14} //error pointing on this line 

বিদ্যমান ভেরিয়েবল myArray- কে পুনঃ-ঘোষণা করছে যা ইতিমধ্যে পূর্ণসংখ্যার মান রয়েছে contains

এইটা কাজ করে:

myArray = [...]int{11,12,14} // NO error will be produced by this line

কারণ, এটি বিদ্যমান (পূর্ব-ঘোষিত / আরম্ভীকৃত) ভেরিয়েবলের জন্য পূর্ণসংখ্যা অ্যারে নির্ধারণ করে।

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