it-swarm.dev

الفرق بين: = و = عوامل التشغيل في Go

في Go ، ما الفرق بين المشغل = و :=؟ كلاهما يبدو أن لمهمة؟ قد يكون هذا واضحًا ولكن لا يمكنني العثور عليه في المستندات.

209
Chris

فقط = هو مشغل المهمة.

:= في الواقع ليست مشغل على الإطلاق. إنه جزء من بناء جملة تعريفات المتغير القصير جملة.

158
zzzz

في Go ، := للإعلان + الواجب ، في حين أن = هو للواجب فقط.

على سبيل المثال ، var foo int = 10 هو نفسه foo := 10.

224
Chaos

كما أوضح الآخرون بالفعل ، := مخصصة للإعلان ، والتخصيص ، وأيضًا لإعادة الإعلان ؛ وتخمين (infer) نوع المتغير تلقائيًا.

إنه شكل قصير من:

var foo int
foo = 32

// OR:
var foo int = 32

// OR:
var foo = 32

بعض القواعد

لا يمكنك استخدام := خارج funcs. لأنه ، من أي func ، يجب أن يبدأ بيان بكلمة رئيسية.

illegal := 42

func foo() {
  legal := 42
}

لا يمكنك استخدامها مرتين (في نفس النطاق):

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

لأن := يقدم "متغير جديد" ، وبالتالي فإن استخدامه مرتين لا يعيد تعريف المتغير الثاني ، لذلك فهو غير قانوني.


ومع ذلك ، يمكنك استخدامها مرتين في "متعدد المتغيرات" التعريفات ، إذا كان أحد المتغيرات جديدًا:

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

هذا قانوني ، لأنك لا تعلن عن جميع المتغيرات ، فأنت فقط تعيد تعيين قيم جديدة للمتغيرات الحالية ، وتعلن عن متغيرات جديدة في نفس الوقت.


يمكنك استخدام التصريح القصير للإعلان عن متغير في نطاق أحدث حتى يتم الإعلان عن هذا المتغير بالفعل بنفس الاسم قبل:

var foo int = 34

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

هنا ، foo := 42 قانوني ، لأنه يعلن foo في نطاق some() func. foo = 314 قانوني ، لأنه يخصص فقط قيمة جديدة لـ foo.


يمكنك استخدامها لتعريفات ووظائف متعددة المتغيرات:

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

يمكنك التصريح عن نفس الاسم في كتل العبارة القصيرة مثل: if ، for ، switch :

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

لأن foo في if foo := ... ، ينتمي فقط إلى جملة if وهو في نطاق مختلف.


كقاعدة عامة: إذا كنت تريد أن تعلن بسهولة عن متغير يمكنك استخدام := ، أو ، إذا كنت تريد الكتابة فوق قيمة موجودة ، يمكنك استخدام =.


المراجع:

51
Inanc Gumus

:= عبارة عن اختصار للإعلان.

a := 10
b := "Gopher"

a سيتم تعريفها كـ int وستتم تهيئتها بقيمة 10 ، حيث سيتم إعلان b كسلسلة وتتم تهيئتها بقيمة Gopher.

سيكون مكافئها باستخدام =

var a = 10
var b = "Gopher"

= هو عامل التعيين. يتم استخدامه بنفس الطريقة التي تستخدم بها في أي لغة أخرى.

يمكنك حذف النوع عندما تقوم بتعريف المتغير ويوجد مُهيئ ( http://tour.golang.org/#11 ).

19
ShuklaSannidhya

:= تعلن وتعين ، = يعين فقط

إنه مفيد عندما لا ترغب في ملء التعليمات البرمجية الخاصة بك بنوع أو تعريف الإعلانات.

// 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)
10
Gustav

: = تعني التصريح و التعيين بينما تعني = التعيين ببساطة.

10
Ralph Caraveo

من الوثيقة المرجعية: ( tour.golang.org )

داخل دالة ، يمكن استخدام بيان المهمة القصيرة := بدلاً من تعريف var بنوع ضمني.

خارج دالة ، كل بنية تبدأ بكلمة أساسية (var ، func ، وما إلى ذلك) و: = build غير متوفر.

6
subhash kumar singh

": =" الاستخدام للقيام بالإعلان والتهيئة في نفس الوقت ، فيما يلي مثال.

استخدام "="

فار أنا كثافة العمليات

أنا = 10

https://play.golang.org/p/RU88ty_SGa

استخدام ": ="

أنا: = 10

https://play.golang.org/p/XBdjBh-DQB

2
Nisal Edu

كلاهما تقنية مختلفة للإعلان المتغير في لغة Go.

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

و

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

إعلان متغير قصير هو اختصار لإعلان متغير عادي مع تعبيرات مهيئ ولكن لا أنواع.

قراءة أدناه لمزيد من التفاصيل:

الإعلانات المتغيرة

تصريحات متغير قصير

1
Pravin Mishra

كما قال كثيرون بالفعل - إن: = يعني إعلان وتعيين ؛ يعني = لتعيين ببساطة. ملاحظة مهمة هنا هي أنه إذا كنت تعمل في وظيفة

foo := 2.5

ثم Go تقرر ما إذا كان foo هو float32 أو float64 استنادًا إلى عدة أشياء ، ولكن بمجرد تحديد وتجميعها كـ float64 ، لا يمكنك استخدام foo كـ float32 والعكس صحيح. لذلك من الأفضل في بعض الأحيان استخدام بناء الجملة الكامل.

0
Belial