بنية نظام الملفات لمشروع Go

هيكل المجلد

تتكون مشاريع Go منالحزم. نحن نتصلأوامرالحزم التي تحتوي علىmainالمعرف.

يمكن أن يكون للمشروع

  • 1صفقة
  • nالحزم
  • 1يأمر
  • 1الأمر و1صفقة
  • nأوامر و1صفقة
  • 1الأمر وnالحزم
  • nأوامر وnالحزم

اعتمادًا على طبيعة مشروعك ، تحتاج إلى تنظيم بنية المجلد بطريقة معينة.

بعض الأمثلة من العالم الحقيقي

دعونا نرى بعض الأمثلة من العالم الحقيقي لهذا في البرية ، هنا أدناه. أخذت منهم منخمسة اقتراحات لإعداد مشروع Goبواسطة ديف تشيني.

مثال لمشروع مع1صفقة:

https://github.com/kr/fs

مثال لمشروع معnالحزم

https://github.com/pkg/term

مثال لمشروع مع1يأمر

https://github.com/tools/godep

مثال لمشروع مع1الأمر و1صفقة

https://github.com/monochromegane/the_platinum_searcher

مثال لمشروع معnأوامر وnالحزم

https://github.com/golang/tools

اصطلاحات لهيكل الملف داخل المشروع

من هذه الأمثلة يمكننا أن نقول هذه الاتفاقيات:

إذا كان لديك أمر واحد ، فيمكنه العيش في ملفmain.goملف في جذر المشروع.

باستخدام أكثر من أمر واحد ، قم بإنشاء ملفcmd/مجلد ، وتحت هذا ، قم بإنشاء مجلد باسم الأمر. في كل مجلد ، يفضل أن يكون ملف.goسيحتوي الملف الذي يحمل نفس الاسم على الامتدادmain()وظيفة ، على الرغم من أنها ليست إلزامية.

يتم وضع الحزم في المجلد الخاص بها ، إلا إذا كان لديك حزمة واحدة فقط.

موقع نظام الملفات للحزم المثبتة

يمكن تثبيت أي مشروع Go باستخدامgo get.go getسيتم تثبيت الحزم تحت$GOPATH/src. على سبيل المثال الكتابة

go get github.com/kr/fs

سيقوم بتنزيل وتثبيت الريبو ذو الحزمة الواحدة الموجود فيhttps://github.com/kr/fs، وسوف يضعها تحت$GOPATH/src/github.com/kr/fs. يمكننا فقط الرجوع إليها في برامجنا باستخدامimport github.com/kr/fs.

ماذا لو كتبنا

go get github.com/tools/godep

بدلا من؟ تذكر أن هذا هو المستودع المكون من أمر واحد الذي ذكرناه من قبل.

go getسيتم تنزيلها كما فعلت من أجلgithub.com/kr/fs، ووضعها تحت$GOPATH/src، ولكن نظرًا لأنه أمر ، فسوف يقوم أيضًا بتجميع وإنشاء ملف$GOPATH/bin/godepالثنائية.

يتم تجميع أوامر Go إلى اسم المجلد المرفق ، وفي هذه الحالة كان المجلد هو الجذر ، لذا فهوgodep. في حالة وجود أوامر متعددة ، سيستغرق الأمرآخر مجلد فرعياسم. مثال: مثالىgithub.com/flaviocopes/tools/cmd/unzipسيتم تجميعها إلىunzip. نعم هو كذلكليسخذ اسم الملف الذي يحتوي على الامتدادmain()وظيفة.

مساحات العمل

Go لديه مفهوم فريد تمامًا منمساحة العمل. مساحة العمل هي بنية المجلد التي$GOPATHنقاط ل. عند إنشاء مساحة عمل جديدة ، أضف امتداد$GOPATH/binمجلد إلى المسار الخاص بك كذلك. على سبيل المثال ، إذا كنت تريد تعيين مساحة العمل الخاصة بك على~/go(وهي الطريقة الافتراضية):

export GOPATH=~/go
export PATH=~/go/bin:$PATH

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

يحتفظ مبرمجو Go عادةً بكل كود Go الخاص بهم في مساحة عمل واحدة.

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

هذا مثال لمساحة العمل المدرجة في المستندات الرسمية:

    bin/
        hello                          # command executable
        outyet                         # command executable
    pkg/
        linux_amd64/
            github.com/golang/example/
                stringutil.a           # package object
    src/
        github.com/golang/example/
            .git/                      # Git repository metadata
        hello/
            hello.go               # command source
        outyet/
            main.go                # command source
            main_test.go           # test source
        stringutil/
            reverse.go             # package source
            reverse_test.go        # test source
        golang.org/x/image/
            .git/                  # Git repository metadata
        bmp/
            reader.go              # package source
            writer.go              # package source
        #... (many more repositories and packages omitted) ...

مع العلم بهذا ، دعنا نرى ..

أين تضع أوامرك وحزمك

عند تشغيل الأوامر باستخدامgo run، يمكنك الحصول على مشروعك في أي مكان تريد ، ولكن هذا نهج مفيد فقط للاختبار السريع.

يجب عليك إنشاء البرامج الخاصة بك داخل$GOPATH/srcالمجلد ، مع مساحة الاسم الفريدة الخاصة بك ، على سبيل المثال

$GOPATH/src/github.com/flaviocopes/hello

عند الجري (من أي مكان في النظام)

go install github.com/flaviocopes/hello

Go سيجمع ويضع ملفhelloثنائي في$GOPATH/bin، جاهز للتشغيل من أي مكان في النظام.

الشيء نفسه ينطبق على الحزم ،يستثنيذلك عند الجريgo install، سيتم وضع الحزمة المترجمة تحتها$GOPATH/pkg.

المرجعي


المزيد من دروس Go: