لماذا لا أحب الذهاب

يجب عليك استخدام Go في وظيفتك الحالية. أصبحت على دراية جيدة بهذه اللغة. أنا لا أحبه ، وأنا في حيرة من شعبيته.

تصميم بيئة العمل

لم تقابل لغة معارضة صراحة لراحة المطورين. على سبيل المثال ، كان Rob Pike مرارًا وتكرارًا معاديًا لأي مناقشة لإلقاء الضوء على بناء الجملة في Go Playground . ردًا على أسئلة المستخدم التي تمت صياغتها بشكل معقول ، فإن ردوده العامة تعكس الإهمال وعدم الاحترام:

تمت كتابة Gofmt خصيصًا لتقليل عدد المناقشات التي لا معنى لها حول تنسيق التعليمات البرمجية ، والتي كانت رائعة. لسوء الحظ ، لم يؤثر هذا على عدد المناقشات التي لا معنى لها حول تسليط الضوء على بناء الجملة أو ، كما أفضّل أن أسميها ، spitzensparken blinkelichtzen.

ومرة أخرى في فرع Go-Nuts لعام 2012 :

تسليط الضوء على بناء الجملة - للصغار. عندما كنت طفلاً ، تعلّمت الحساب على العصي الملونة . لقد كبرت الآن واستخدمت أرقامًا بالأبيض والأسود.

بوضوح ، من معارف روب ، لا أحد يعاني من التخليق أو عُسر القراءة أو ضعف البصر. نظرًا لموقعها ، لا يزال موقع Go الرسمي والوثائق بدون تمييز بناء الجملة.

فريق تطوير Go ليس مقصورًا على Pike ، ولكن الباقي يدعم بقوة موقفه من بيئة العمل. في مناقشة حول أنواع الاتحاد / المبلغ ، رفض ianlancetaylor طلبًا يعرّف بشكل خاص ميزة بيئة العمل بأنه غير مهم للغاية ولا يستحق الاهتمام:

وقد نوقش هذا عدة مرات في الماضي ، بما في ذلك قبل الإصدار المفتوح. ثم توصلنا إلى استنتاج مفاده أن أنواع المبلغ لا تمد أنواع الواجهة بشكل خاص. إذا نظرتم ، في النهاية ، يعود الأمر كله إلى حقيقة أن المترجم يتحقق من أنك قد ملأت جميع حالات تبديل الكتابة. هذه ميزة صغيرة جدًا لتغيير اللغة.

هذا الموقف يتعارض مع أنواع الاتحادات بلغات أخرى. في عام 2000 ، انتقدت JWZ Java:

, enum :keywords . (, , «`enumeration value x', switch»).

Java , Java .  — , Rust, Scala, Elixir , Go, C — , . , , Go .


, . .

, Go . , . Go « » « », .

, « ». , , , , , . Go , , Java 1.4.

— . , , , . , Go.

Google, «» «» .


go get . — , Go .

Go, , , . C Autotools — , . , 21 .

GOPATH


. vendor , , «» «» .

, Go « » .

Go


Go , , ( ; Go ) error , nil « ».

, Go. , , . , : , , error - , , — .

Go , - :

a, err := fallibleOperationA()
if err != nil {
    return nil, err
}

b, err := fallibleOperationB(a)
if err != nil {
    return nil, err
}

return b, nil



a = fallibleOperationA()
b = fallibleOperationB(a)
return b



return fallibleOperationA()
    .then(a => fallibleOperationB(a))
    .result()

.

, ( , ). . , . :

a, err := fallibleOperationA()
if err != nil {
    return nil, err
}

if err := fallibleOperationB(a); err != nil {
    return nil, err
}

c, err := fallibleOperationC(a)
if err != nil {
    return nil, err
}

fallibleOperationD(a, c)

return fallibleOperationE()

- .

Source: https://habr.com/ru/post/ar434446/


All Articles