مرحبا بالجميع! أريد أن أشارك أول تجربة برمجة في Go.
بدأت طريقي إلى البرمجة كمطور للواجهة الأمامية. ثم انتقلت إلى الواجهة الخلفية في بيثون ، وقليلا لنفسي ، إلى C # Asp.Net MVC. لكن في الآونة الأخيرة ، قبل شهرين ، قابلت هذه اللغة الجميلة Go.
لماذا تذهب؟
1 - لغة مترجمة.
2 هي لغة غير عادية للغاية.
الهياكل ، واجهات ... اضطررت إلى كسر ذهني ، وتعلم. والمشكلة الأولى ، أكثر ، هي إعادة التعلم. أين هي الطبقات؟ أين هو OOP؟ أين هي الأنماط المفضلة لديك؟
ولكن كسر رأسي قليلاً ، تم الكشف عن لغة "جو" ووقعت في حبها. حسنًا ، بالطبع ، أول ما قررت أن أكتب أول "دراجة" له ، وهي إطار الويب الذي يسمى MGGO.
ما أردت وما تطمح إليه
بالطبع ، أردت على الفور إنشاء إطار عمل MVC مثل Asp.Net. لكن اتضح أنها ليست بهذه البساطة ، لأن لغة Go غريبة. ولكن هنا ما حدث:
وحدات التحكم (تحكم)
وحدة التحكم هي بنية يمكن أن تكون الطرق فيها خارجية (api) وداخلية فقط ، وكذلك تلك المسؤولة عن العرض.
على الفور على سبيل المثال ، النظر في وحدة تحكم الأخبار.
import mggo type News struct{ ID int Title string Text string } func NewNews() *NewNews{ return &NewNews{} } func init() {
بعد ذلك ، تتوفر الأخبار على / news /
حيث يكون news هو اسم وحدة التحكم ، وتكون الصفحة الرئيسية هي index ، والتي تكون طريقة IndexView مسؤولة عنها.
الآن عن api. لدى وحدة التحكم News طريقة قراءة. بشكل افتراضي ، إنها الخدمة فقط. من أجل السماح بطلب api لهذه الطريقة ، تحتاج إلى إضافة حقوق إلى الطريقة في وظيفة التحكم "init".
func init(){ ... mggo.AppendRight("News.Read", mggo.RRightGuest) }
بعد ذلك ، تتوفر طريقة القراءة لاستدعاء api لأي مستخدم.
fetch("/api/", { "method": "POST", "headers": { 'Accept': 'application/json', 'Content-Type': 'application/json' }, "body": JSON.stringify({ "method": "News.Read", "params": {} }) }).then(res => res.Json()).then(console.log)
يؤدي
{result: {ID:1, Title:"First News", Text:"Text first News"}}
قليلا عن المعلمات. سيتم تمرير جميع المعلمات داخل كائن params كحقول بنية.
على سبيل المثال ، دعونا نقوم بتعديل وظيفة القراءة قليلاً:
func(n *News) Read(ctx *mggo.BaseContext) News{ if n.ID ==1 { return News{1, "First News", "Text first News"} } else { return News{} } }
ويجب أن تكون استدعاء api بمعرف المعلمة: 1 - params {ID: 1})
ماذا بعد؟
كيو. يتم توصيل مكتبة
Go-pg في الإطار. دعونا الحصول على مثال على الفور. تحكم الأخبار لدينا لديه بيانات ثابتة. يحتاج إلى تغيير. للقيام بذلك ، أول ما عليك فعله هو إنشاء جدول أخبار. إضافة بضعة أسطر إلى الدالة init.
func init(){ ... mggo.InitCallback(func(){ mggo.CreateTable([]interface{}{(*News)(nil)}) }) }
الآن ، بعد التهيئة ، نحصل على جدول الأخبار ، بهوية الحقول والعنوان والنص.
تغيير طريقة القراءة:
func(n *News) Read(ctx *mggo.BaseContext) News{ mggo.SQL().Select(n) return *n }
إذا قمنا باستدعاء أسلوب News.Read بمعرف المعلمة: 1 ، فنتيجة لذلك نحصل على البيانات من جدول الأخبار باستخدام المفتاح 1.
يمكن الاطلاع على ميزات Go-pg في
الوثائق .
لكن هذا ليس كل شيء. لا يمكن وصف كل شيء هنا. نأمل أن أكتب ونشر وثائق مفصلة قريبا. فيما يلي ملخص موجز لما يمكن أن تفعله Mggo.
⁃ مآخذ الويب
⁃ أحداث الخادم والعميل
method نتائج طريقة التخزين المؤقت
calls دعم المكالمات JsonRPC
⁃ Liba للتحكم السريع وإنشاء العرض
هذا كل شيء الآن. آمل أن يجد شخص ما المادة مفيدة. بالطبع ، هناك مجموعة من الأطر الأخرى الجاهزة والرائعة. أردت فقط أن أحاول القيام بشيء خاص بي لتجربتي الشخصية.
رابط للمشروعرابط إلى مثال وبداية سريعة