cari
Rumahpembangunan bahagian belakangGolangCara saya menulis Go API dalam pengalaman saya dengan Fuego

How I write Go APIs in  my experience with Fuego

Pengalaman Saya Membina API Go dengan Fuego

Sebagai pembangun Go dengan pengalaman beberapa tahun, saya telah meneroka pelbagai rangka kerja web. Perjalanan saya termasuk perpustakaan standard, Gin, dan Fiber. Walaupun masing-masing mempunyai kelebihan, saya sering mendapati diri saya memerlukan lebih banyak struktur atau menghabiskan masa yang berlebihan untuk menyepadukan berbilang perpustakaan untuk pengesahan, penyiaran dan dokumentasi. Di situlah Fuego menukar permainan.

Pada mulanya, Fuego kelihatan seperti rangka kerja lain. Walau bagaimanapun, penggunaan ciri Go moden, terutamanya generik, untuk menjana spesifikasi OpenAPI secara automatik terus daripada kod, menarik minat saya. Saya memutuskan untuk mengujinya pada projek dalaman yang kecil, dan inilah akaun jujur ​​saya.


Tanggapan Pertama

Kesederhanaan Fuego segera terserlah. Menyediakan pelayan asas mengambil masa hanya beberapa minit:

package main

import "github.com/go-fuego/fuego"

func main() {
    s := fuego.NewServer()
    fuego.Get(s, "/", func(c fuego.ContextNoBody) (string, error) {
        return "Hello, World!", nil
    })
    s.Run()
}

Keakraban itu sangat menarik—serupa dengan Gin, tetapi dengan sokongan OpenAPI terbina dalam.


Contoh Dunia Nyata

Contoh "Hello World" tidak menggambarkan kerumitan dunia sebenar. Aplikasi saya memerlukan pengendalian data JSON, pengesahan dan respons yang ditaip. Rangka kerja lain memerlukan penyahkodan JSON tersuai, pengendalian ralat dan penyepaduan middleware. Fuego memperkemas ini dengan banyak menggunakan pengendali laluan ditaip.

Berikut ialah pengendali laluan yang dipermudahkan:

type UserInput struct {
    Name string `json:"name" validate:"required"`
}

type UserOutput struct {
    Message string `json:"message"`
}

func main() {
    s := fuego.NewServer()
    fuego.Post(s, "/user", handleUser)
    s.Run()
}

func handleUser(c fuego.ContextWithBody[UserInput]) (UserOutput, error) {
    in, err := c.Body()
    if err != nil {
        return UserOutput{}, err
    }
    return UserOutput{Message: "Hello, " + in.Name}, nil
}

Peningkatan utama:

  1. Pengendali Ditaip: fuego.ContextWithBody[UserInput] secara automatik menyahsiri JSON ke dalam struct UserInput.
  2. Pengesahan: validate:"required" memastikan medan Name ada; Fuego mengendalikan ralat dengan anggun.
  3. Respons: Mengembalikan struct UserOutput secara automatik mensirikannya kepada JSON.

Ini menghapuskan kod plat dandang yang ketara—tiada json.Unmarshal, perpustakaan pengesahan luaran atau pengendalian ralat tersuai.


Mengapa Fuego Menyerlah

  1. Native Go Feel: Tidak seperti rangka kerja yang banyak membalut net/http, Fuego berasa sangat asli. Ia menggunakan net/http secara langsung, membenarkan penyepaduan lancar bagi perisian tengah dan pengendali standard. Saya menggunakan semula perisian tengah pengesahan sedia ada tanpa masalah.

  2. Penjanaan OpenAPI Automatik: Saya sebelum ini menguruskan fail YAML yang berasingan atau bergantung pada ulasan untuk spesifikasi OpenAPI, proses yang membosankan dan mudah ralat. Fuego menjana spesifikasi secara automatik daripada jenis pengendali laluan, memastikan dokumentasi sentiasa kekal terkini.

  3. Pengesahan dan Pengendalian Ralat: Pengesahan bersepadu (menggunakan go-playground/validator) adalah intuitif dan pengendalian ralat dipermudahkan. Struktur UserInput tidak sah mengakibatkan mesej ralat berstruktur yang mematuhi piawaian RFC.


Transformasi Data

Untuk memastikan semua medan Name masuk adalah huruf kecil, saya memanfaatkan kaedah InTransform Fuego:

package main

import "github.com/go-fuego/fuego"

func main() {
    s := fuego.NewServer()
    fuego.Get(s, "/", func(c fuego.ContextNoBody) (string, error) {
        return "Hello, World!", nil
    })
    s.Run()
}

Ini menukar data secara automatik sebelum sampai ke pengendali laluan.


Cabaran Dihadapi

  1. Ekosistem yang Lebih Kecil: Pangkalan pengguna Fuego yang lebih kecil berbanding Gin atau Echo menyebabkan sumber komuniti yang lebih sedikit tersedia. Walau bagaimanapun, contoh dan dokumentasi repositori terbukti mencukupi.

  2. Perisian Tengah Terbina Dalam Terhad: Walaupun Fuego menyediakan beberapa perisian tengah, ia tidak seluas beberapa rangka kerja lama. Keserasian net/http dibenarkan menggunakan perpustakaan luaran atau perisian tengah tersuai.


Kesimpulan

Fuego menawarkan keseimbangan yang menarik antara kemudahan dan fleksibiliti. Ia mempercepatkan pembangunan API dengan pengesahan terbina dalam, bersiri dan penjanaan dokumentasi, sambil kekal berpegang kepada prinsip Go. Menggunakan struct yang ditaip dan membiarkan Fuego menguruskan yang lain telah meningkatkan aliran kerja saya dengan ketara.

Faedah utama:

  • Peningkatan Produktiviti: Kod yang lebih bersih dan plat dandang yang dikurangkan.
  • Dokumentasi Automatik: Sentiasa kemas kini spesifikasi OpenAPI.
  • Peralihan Lancar: Penyepaduan mudah dengan pengendali net/http sedia ada.

Jika anda mencari rangka kerja Go yang moden dan fleksibel, terutamanya jika anda bosan dengan penyelenggaraan OpenAPI manual, saya amat mengesyorkan Fuego. Ia memudahkan proses pembangunan saya sambil kekal berpegang kepada falsafah minimalis Go. Repositori GitHub menyediakan maklumat yang komprehensif dan peta jalan yang menjanjikan. Saya teruja dengan masa depannya dan akan terus menggunakannya untuk projek akan datang.

Atas ialah kandungan terperinci Cara saya menulis Go API dalam pengalaman saya dengan Fuego. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Cara menggunakan pakej 'Strings' untuk memanipulasi rentetan dalam langkah demi langkahCara menggunakan pakej 'Strings' untuk memanipulasi rentetan dalam langkah demi langkahMay 13, 2025 am 12:12 AM

Pakej Strings Go menyediakan pelbagai fungsi manipulasi rentetan. 1) Gunakan strings.Contains untuk memeriksa substrings. 2) Gunakan string.split untuk memecah rentetan ke dalam kepingan substring. 3) menggabungkan rentetan melalui string.join. 4) Gunakan rentetan.trimspace atau string.Trim untuk mengeluarkan kosong atau aksara yang ditentukan pada awal dan akhir rentetan. 5) Gantikan semua substring yang ditentukan dengan string.replaceall. 6) Gunakan string.hasprefix atau strings.hassuffix untuk memeriksa awalan atau akhiran rentetan.

Pakej Pergi Strings: Bagaimana Meningkatkan Kod Saya?Pakej Pergi Strings: Bagaimana Meningkatkan Kod Saya?May 13, 2025 am 12:10 AM

Menggunakan pakej GO Language boleh meningkatkan kualiti kod. 1) Gunakan string.join () untuk menyambungkan array rentetan dengan elegan untuk mengelakkan overhead prestasi. 2) menggabungkan rentetan.split () dan strings.contains () untuk memproses teks dan perhatikan masalah kepekaan kes. 3) Elakkan penyalahgunaan strings.replace () dan pertimbangkan untuk menggunakan ungkapan biasa untuk sebilangan besar penggantian. 4) Gunakan string.builder untuk meningkatkan prestasi rentetan splicing yang kerap.

Apakah fungsi yang paling berguna dalam pakej Go Bytes?Apakah fungsi yang paling berguna dalam pakej Go Bytes?May 13, 2025 am 12:09 AM

Pakej Bytes Go menyediakan pelbagai fungsi praktikal untuk mengendalikan pengirik byte. 1.Bytes.Contains digunakan untuk memeriksa sama ada slice byte mengandungi urutan tertentu. 2.Bytes.split digunakan untuk memecah irisan byte ke dalam pecahan. 3.Bytes.join digunakan untuk menggabungkan pelbagai hirisan byte ke dalam satu. 4.Bytes.Trimspace digunakan untuk mengeluarkan kekosongan depan dan belakang irisan byte. 5.Bytes.Equal digunakan untuk membandingkan sama ada dua keping byte adalah sama. 6.Bytes.Index digunakan untuk mencari indeks permulaan sub-lisan dalam largerlices.

Menguasai pengendalian data binari dengan pakej 'pengekodan/binari' Go: panduan komprehensifMenguasai pengendalian data binari dengan pakej 'pengekodan/binari' Go: panduan komprehensifMay 13, 2025 am 12:07 AM

Theencoding/binarypackageingoisessentialbecauseitprovideSastandardardwaywaytoreadandwriteBinaryData, memastikanCross-platformcompatibilityandhandlingdifferentendianness.itoffersFunctionsLikeread, tulis, readuupisyary

Pergi 'bytes' Pakej Rujukan cepatPergi 'bytes' Pakej Rujukan cepatMay 13, 2025 am 12:03 AM

TheBytespackageingoiscialforhandlingbyteslicesandbuffers, menawarkanToolsforefficientMemoryManagementandDataManipulation.1) itprovidesfunctionalitiesLikeCreatingBuffers, ComparingsLices, dan menggantikan/menggantikan

Menguasai GO Strings: menyelam mendalam ke dalam pakej 'rentetan'Menguasai GO Strings: menyelam mendalam ke dalam pakej 'rentetan'May 12, 2025 am 12:05 AM

Anda harus mengambil berat tentang pakej "Strings" di GO kerana ia menyediakan alat untuk mengendalikan data teks, splicing dari rentetan asas hingga pemadanan ekspresi biasa yang maju. 1) Pakej "Strings" menyediakan operasi rentetan yang cekap, seperti fungsi gabungan yang digunakan untuk meresap rentetan untuk mengelakkan masalah prestasi. 2) Ia mengandungi fungsi lanjutan, seperti fungsi ContainSany, untuk memeriksa sama ada rentetan mengandungi set aksara tertentu. 3) Fungsi ganti digunakan untuk menggantikan substrings dalam rentetan, dan perhatian harus dibayar kepada perintah penggantian dan kepekaan kes. 4) Fungsi perpecahan boleh memecah rentetan mengikut pemisah dan sering digunakan untuk pemprosesan ekspresi biasa. 5) Prestasi perlu dipertimbangkan semasa menggunakan, seperti

Pakej 'Pengekodan/PerduaPakej 'Pengekodan/PerduaMay 12, 2025 am 12:03 AM

"Pengekodan/binari" PacketingoisessentialforhandlingbinaryData, menawarkanToolSforreadingandWritingBinaryDatafiently.1) itsupportsbothlittle-endianandbig-endianbyteorders, crucialforcross-sistempatibility.2) thePackAgeAlAgeAllowSworksworks

Pergi Byte Slice Manipulasi Tutorial: Menguasai Pakej 'Bytes'Pergi Byte Slice Manipulasi Tutorial: Menguasai Pakej 'Bytes'May 12, 2025 am 12:02 AM

Menguasai pakej bait di GO boleh membantu meningkatkan kecekapan dan keanggunan kod anda. 1) Pakej bait adalah penting untuk parsing data binari, memproses protokol rangkaian, dan pengurusan memori. 2) Gunakan bytes.buffer untuk secara beransur -ansur membina irisan byte. 3) Pakej bait menyediakan fungsi mencari, menggantikan dan segmen kepingan byte. 4) Jenis bait. 5) Pakej Bytes berfungsi dengan kerjasama pemungut sampah Go, meningkatkan kecekapan pemprosesan data besar.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular