Golang برای برنامه نویس های PHP: مدیریت وابستگی (مقایسه Glide و Composer)

golang, PHP9 فروردین 1399
لوگوی Glide و Composer

اگه برنامه نویس PHP هستین و دارین Golang هم یاد می گیرین، حتما پیشنهاد می کنم تا انتهای این مطلب رو پیرامون مقایسه مدیریت وابستگی توسط Composer و Glide با قلاب همراه باشین☺️

قطعا خودتون بهتر می دونین که مدیریت وابستگی در PHP با استفاده از Composer انجام میشه. Composer خیلی کاربردیه و به راحتی میشه ازش استفاده کرد. Glide برای Golang همون کاری رو میکنه که Composer برای PHP میکنه. Glide راحت ترین و پرطرفدارترین ابزار برای مدیریت وابستگی در Golang هست.

ازهمین ابتدا بگم که اینجا قرار نیست نحوه نصب و استفاده از Glide رو توضیح بدیم. بلکه می خوایم از منظر چهار دستور اصلی Composer، به مقایسه ی Composer و Glide بپردازیم. این چهار دستور عبارتند از: update , require، install، init.

مقایسه دستور init در Composer و Glide

Glide هم دستور init را به منظور مقداردهی اولیه مدیریت وابستگی در پروژه Golang می شناسه. این دستور، پس از پرسیدن تعدادی سوال در مورد پکیجی که دارید ست می کنید، glide.yaml اولیه را برای شما ست می کنه.

به منظور ایجاد یک glide.yaml باید به شکل زیر عمل کنید:

glide init 

سپس Glide، فایل glide.yaml را ایجاد میکنه و اگر glide رو بر روی کدهایی که قبلا دارای وابستگی باشن، آغاز کرده باشین سعی میکنه فایل glide.yaml رو با اون ها پر کنه.

مقایسه دستور install در Composer و Glide

حالا یاد گرفتین چطور Glide رو در پروژه تون آغاز کنین، وقتش رسیده که وابستگی های رو نصب کنین! Composer و Glide از این لحاظ خیلی شبیه هم هستن. به منظور نصب وابستگی ها کافیه به سادگی دستور زیر رو فراخوانی کنین:

glide install

به محض انجام فراخوانی بالا، Glide وابستگی ها رو در Vendor یا folder نصب میکنه؛ دقیقا همونجوری که Composer این کار رو انجام میده!

مقایسه دستور require در Composer و Glide

دستور get در Glide معادل دستور require در Composer هست و کاملا هم شبیه همدیگه عمل می کنن. به عنوان نمونه دو تیکه کد زیر رو در نظر بگیرین:

composer require rtuin/somepackage # Add a dev dependency 
composer require --dev rtuin/somepackage   # Or, with version specified 
composer require rtuin/somepackage:^1.0

معادل کد بالا در Glide به شکل زیره (دقت کنین که به جای : از # استفاده شده):

glide get github.com/rtuin/somepackage  # Add a dev dependency  
glide get --test github.com/rtuin/somepackage # Or, with version specified  
glide get github.com/rtuin/somepackage#^1.0

لازمه بدونید که شماره گذاری نسخه ها در Glide دقیقا مشابه Composer انجام میشه.

مقایسه دستور update در Composer و Glide

دستور update در Glide و Composer دقیقا نتیجه ی مشابهی داره. این دستور، نسخه های جدید وابستگی رو در پکیج هایی که در فایل glide.yaml آمده پیدا میکنه و بررسی می کنه که آیا بر اساس محدودیت هایی که شما برای محدوده ی نسخه ها تعیین کردین، نیاز هست نصب بشن یا خیر؟

در صورتی که پکیج ای نیاز داشته باشه که به روزرسانی بشه، Glide هم دقیقا شبیه Composer پکیج مربوطه رو به داخل vendor یا folder دانلود میکنه و نسخه ی جدید رو در فایل glide.lock مینویسه.

دستور composer.json در Glide چطور نوشته میشه؟

Glide از فرمت YAML به جای json استفاده میکنه، اما به جز این تفاوت در فرمت به لحاظ ذاتی glide.yaml و composer.json دقیقا مشابه همدیگه هستن.

در ادامه یک فایل composer.json و یک فایل glide.yaml واستون گذاشتم که بتونین به راحتی این دو رو باهم مقایسه کنین.

سه تفاوت اصلی بینشون وجود داره:

  • تعریف پکیج در glide.yaml، شامل شماره نسخه نمیشه بلکه نسخه ی پکیج توسط سیستم کنترل نسخه تعریف میشه.
  • به جای dev import از test import استفاده میشه اما کاربردشون کاملا عین همه.
  • autoload directive در Glide وجود نداره. چراکه Golang روش ثابت مخصوص به خودش را برا ی لود کردن وابستگی ها داره که شما با استفاده از Glide نمیتونید بهش نفوذ کنید. لود کردن پکیج ها در Golang پیش بینی شده و نیازی به مقداردهی در قسمت مدیریت وابستگی نداره.

Composer.json

{
  "name": "rtuin/somepackage",
  "description": "This is some package description",
  "homepage": "https://github.com/rtuin/somepackage",
  "license": "MIT",
  "version": "1.0.0",
  "authors": [
    {
      "name": "Richard Tuin",
      "email": "git@rtuin.nl",
      "homepage": "http://www.rtuin.nl"
    }
  ],
  "autoload": {
    "psr-4": {"Rtuin\\Somepackage": "src/"}
  },
  "require": {
      "rtuin/someotherpackage": "^4.1",
  },
  "require-dev": {
    "rtuin/somedevdependency": "^5.3"
  }
} 

glide.yaml

package: github.com/rtuin/somepackage
homepage: https://github.com/rtuin/somepackage
license: MIT
owners:
- name: Richard Tuin
  email: git@rtuin.nl
  homepage: http://www.rtuin.nl
import:
- package: github.com/rtuin/someotherpackage
  version: ^4.1
testImport:
- package: github.com/rtuin/somedevdependency
  version: ^5.3 

نتیجه گیری

همونطوری که دیدین Glide در Golang بسیار مشابه Composer در PHP هست. Glide تنها راه مدیریت وابستگی برای Golang نیست اما قطعا ساده ترینه و خیلی هم شبیه به Composer ه. این کار رو برای برنامه نویس هایی که قبلا PHP مینوشتن اما حالا میخوان Golang هم یاد بگیرن راحت تر میکنه.

این مطلب رو همینجا به پایان می برم. امیدوارم که واستون مفید راقع شده باشه. ممنون که در آموزش های بعدی با قلاب همراه هستین.

Please Post Your Comments & Reviews

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*