Halo semuanya! Saya ingin berbagi pengalaman pemrograman pertama saya di Go.
Saya mulai dengan pemrograman sebagai pengembang frontend. Kemudian saya beralih ke backend dengan Python dan, sedikit untuk diri saya sendiri, ke C # Asp.Net MVC. Namun baru-baru ini, beberapa bulan yang lalu, saya bertemu dengan bahasa Go yang indah ini.
Kenapa pergi?
1 - bahasa yang dikompilasi.
2 adalah bahasa yang sangat tidak biasa.
Struktur, antarmuka ... Saya harus menghancurkan otak saya, belajar kembali. Dan masalah pertama, selesai, adalah belajar kembali. Di mana kelasnya? Dimanakah OOP? Di mana pola favorit Anda?
Tapi sedikit mematahkan kepalaku, bahasa Go diungkapkan kepadaku dan aku jatuh cinta padanya. Yah, tentu saja, hal pertama yang saya putuskan untuk menulis "sepeda" pertama saya, yaitu kerangka web yang disebut MGGO.
Apa yang saya inginkan dan cita-cita saya
Tentu saja, saya langsung ingin membuat kerangka kerja MVC seperti Asp.Net. Tetapi ternyata tidak sesederhana itu, karena bahasa Go adalah aneh. Tetapi inilah yang terjadi:
Pengontrol
Pengontrol adalah struktur di mana metode dapat berupa eksternal (api) dan hanya internal, serta yang bertanggung jawab atas tampilan.
Langsung pada contoh, pertimbangkan pengontrol berita.
import mggo type News struct{ ID int Title string Text string } func NewNews() *NewNews{ return &NewNews{} } func init() {
Setelah itu, berita tersedia di / news /
Di mana berita adalah nama pengontrol, dan halaman utama adalah indeks, di mana metode IndexView bertanggung jawab.
Sekarang tentang api. Pengontrol Berita memiliki metode Baca. Secara default, ini hanya layanan. Untuk mengizinkan permintaan api ke metode ini, Anda perlu menambahkan hak ke metode di fungsi pengontrol "init".
func init(){ ... mggo.AppendRight("News.Read", mggo.RRightGuest) }
Setelah itu, metode Baca tersedia untuk pemanggilan api ke pengguna mana pun.
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)
Hasil
{result: {ID:1, Title:"First News", Text:"Text first News"}}
Sedikit tentang parameter. Semua parameter di dalam objek params akan diteruskan sebagai bidang struktur.
Misalnya, mari kita sedikit mengubah fungsi Baca:
func(n *News) Read(ctx *mggo.BaseContext) News{ if n.ID ==1 { return News{1, "First News", "Text first News"} } else { return News{} } }
Dan panggilan api harus dengan ID parameter: 1 - params {ID: 1})
Apa lagi
PostgreSQL Pustaka
Go-pg terhubung dalam kerangka kerja. Mari kita ambil contoh segera. Pengontrol berita kami memiliki data statis. Itu perlu diubah. Untuk melakukan ini, hal pertama yang perlu Anda lakukan adalah membuat tabel Berita. Tambahkan beberapa baris ke fungsi init.
func init(){ ... mggo.InitCallback(func(){ mggo.CreateTable([]interface{}{(*News)(nil)}) }) }
Sekarang, setelah inisialisasi, kita mendapatkan tabel berita, dengan kolom isian, judul dan teks.
Ubah metode Baca:
func(n *News) Read(ctx *mggo.BaseContext) News{ mggo.SQL().Select(n) return *n }
Jika kita memanggil metode News.Read dengan ID parameter: 1, maka sebagai hasilnya kita mendapatkan data dari tabel berita dengan kunci 1.
Fitur Go-pg dapat ditemukan dalam
dokumentasi .
Tapi itu belum semuanya. Semuanya tidak bisa dijelaskan di sini. Semoga saya akan segera menulis dan memposting dokumentasi terperinci. Berikut ini ringkasan singkat tentang apa yang dapat dilakukan Mggo.
⁃ Soket web
⁃ Acara server dan klien
⁃ Hasil metode caching
⁃ Mendukung panggilan JsonRPC
⁃ Liba untuk pengontrol cepat dan melihat kreasi
Itu saja untuk saat ini. Saya harap seseorang akan menemukan artikel yang bermanfaat. Tentu saja, ada banyak kerangka kerja siap pakai dan keren lainnya. Saya hanya ingin mencoba melakukan sesuatu sendiri untuk pengalaman pribadi saya.
Tautan ke proyekTautan ke contoh dan mulai cepat