Rumah pembangunan bahagian belakang Golang Dari kemasukan kepada kemahiran: Menguasai rangka kerja go-zero

Dari kemasukan kepada kemahiran: Menguasai rangka kerja go-zero

Jun 23, 2023 am 11:37 AM
bermula bingkai go-zero

Go-zero ialah rangka kerja bahasa Go yang sangat baik yang menyediakan set penyelesaian lengkap, termasuk RPC, caching, tugas berjadual dan fungsi lain. Sebenarnya, sangat mudah untuk membina perkhidmatan berprestasi tinggi menggunakan go-zero, malah anda boleh pergi dari pemula kepada mahir dalam beberapa jam.

Artikel ini bertujuan untuk memperkenalkan proses membina perkhidmatan berprestasi tinggi menggunakan rangka kerja go-zero dan membantu pembaca memahami dengan cepat konsep teras rangka kerja tersebut.

1. Pemasangan dan konfigurasi

Sebelum mula menggunakan go-zero, kami perlu memasangnya dan mengkonfigurasi beberapa persekitaran yang diperlukan.

1. Pemasangan

Memasang go-zero adalah sangat mudah, cuma jalankan arahan berikut:

$ go get -u github.com/tal-tech/go-zero
Salin selepas log masuk

Ini akan memuat turun versi terbaharu go-zero daripada GitHub . Walau bagaimanapun, perlu diingatkan bahawa disyorkan untuk menggunakan Go 1.13 dan ke atas.

2. Konfigurasi

Sebelum menggunakan go-zero, kita perlu mengkonfigurasi beberapa persekitaran yang diperlukan untuknya. Khususnya, kita perlu memasang alat baris arahan goctl untuk menggunakan go-zero untuk mencipta perkhidmatan.

$ GO111MODULE=on go get -u github.com/tal-tech/go-zero/tools/goctl
Salin selepas log masuk

3. Cipta projek

Seterusnya, kita perlu menggunakan goctl untuk mencipta projek baharu. Kami menganggap bahawa projek itu dinamakan blog dan boleh dibuat dengan arahan berikut:

$ mkdir blog
$ cd blog
$ go mod init blog
$ goctl api new blog
Salin selepas log masuk

Perintah di atas akan mencipta projek API baharu dan menjana beberapa fail dan direktori yang diperlukan.

2. Buat perkhidmatan

Seterusnya, kita boleh menggunakan go-zero untuk mencipta perkhidmatan baharu. Kami menganggap bahawa nama perkhidmatan ialah perkhidmatan pengguna, yang boleh dibuat melalui langkah berikut:

1 Jana perkhidmatan

Gunakan goctl untuk menjana kod perkhidmatan perkhidmatan pengguna: <🎜. >

$ goctl api go -api user.api -dir .
Salin selepas log masuk

Arahan di atas Direktori pengguna akan dijana dalam direktori semasa, mengandungi fail bernama user.go, yang mengandungi kod perkhidmatan perkhidmatan pengguna.

2. Implement handler

Kita juga perlu melaksanakan logik perniagaan tertentu, iaitu pengendali.

Pertama, kita perlu mencipta direktori baharu bernama pengendali di bawah direktori pengguna dan mencipta fail bernama userhandler.go di dalamnya. Fail ini akan mengandungi kod pengendali kami.

kod userhandler.go adalah seperti berikut:

package handler

import (
    "net/http"

    "github.com/tal-tech/go-zero/rest/httpx"
    "blog/service/user/api/internal/logic"
    "blog/service/user/api/internal/svc"
)

func userHandler(ctx *svc.ServiceContext) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        req, err := httpx.NewRequest(r)
        if err != nil {
            httpx.WriteError(w, err)
            return
        }

        l := logic.NewUserLogic(r.Context(), ctx)
        resp, err := l.GetUser(req)
        if err != nil {
            httpx.WriteError(w, err)
            return
        }

        httpx.WriteJson(w, resp)
    }
}
Salin selepas log masuk

Kod di atas menggunakan pakej selebihnya/httpx yang disediakan oleh go-zero, yang menyediakan beberapa fungsi mudah, seperti NewRequest, WriteError dan WriteJSON, dsb. Proses penulisan perkhidmatan HTTP yang dipermudahkan.

3. Daftar pengendali

Sekarang kita perlu mendaftarkan program pengendali di atas ke dalam perkhidmatan.

Dalam kaedah init dalam fail user.go, tambah kod berikut:

func (s *Service) InitHandlers() {
    s.UserHandler = http.HandlerFunc(handler.UserHandler(s.Context))
}
Salin selepas log masuk

Kod di atas mendaftarkan fungsi userHandler sebagai perkhidmatan HTTP, kami boleh mengaksesnya dengan menentukan laluan dalam fail API Serve.

3. Cipta templat

Kami boleh menjana API go-zero baharu melalui goctl create api, yang secara automatik akan mencipta folder yang mengandungi beberapa konfigurasi permulaan. Kami boleh menambah pengawal dan perkhidmatan kami sendiri di dalamnya mengikut keperluan goctl.

Di sini kami mencipta aplikasi templat untuk belajar membaca kod sumber go-zero dengan lebih baik. Aplikasi ini akan mengandungi contoh CRUD yang menunjukkan cara menggunakan ciri biasa go-zero.

1. Jana templat

Kita boleh menggunakan goctl untuk menjana aplikasi templat untuk mempelajari kod sumber go-zero dengan lebih baik.

$ goctl api template -o app.go
Salin selepas log masuk

Arahan di atas akan mencipta fail bernama app.go yang mengandungi semua kod sumber aplikasi templat.

2. Laksanakan akses data

Kami menganggap bahawa MySQL digunakan untuk penyimpanan data. Sebelum memulakan, MySQL perlu dipasang dan dikonfigurasikan. Atas dasar ini, kita boleh menggunakan go-sql yang disediakan oleh go-zero untuk membina lapisan akses pangkalan data.

Secara khusus, kita boleh menggunakan goctl untuk menjana kod lapisan akses data:

$ goctl model mysql datasource "root:123456@tcp(127.0.0.1:3306)/test" -table user -dir .
Salin selepas log masuk

Arahan di atas akan menjana fail userModel.go yang mengandungi model data pengguna untuk akses data.

3. Laksanakan logik perniagaan

Seterusnya, kita perlu melaksanakan logik perniagaan dan menggunakannya bersama dengan lapisan akses data. Khususnya, kami boleh mencipta fail bernama userLogic.go yang mengandungi logik perniagaan untuk pengurusan pengguna.

kod userLogic.go adalah seperti berikut:

package logic

import (
    "context"
    "github.com/tal-tech/go-zero/core/logx"
    "github.com/tal-tech/go-zero/core/stores/sqlx"
    "blog/service/user/model"
    "blog/service/user/api/internal/svc"
    "blog/service/user/api/internal/types"
)

type UserLogic struct {
    ctx context.Context
    svcCtx *svc.ServiceContext
    logx.Logger
}

func NewUserLogic(ctx context.Context, svcCtx *svc.ServiceContext) UserLogic {
    return UserLogic{
        ctx: ctx,
        svcCtx: svcCtx,
        Logger: logx.WithContext(ctx),
    }
}

func (l *UserLogic) GetUser(req types.GetUserRequest) (*types.GetUserResponse, error) {
    //Todo
}
Salin selepas log masuk

Dalam kod di atas, kami memperkenalkan pakej sqlx, kedai dan logx, di mana sqlx adalah sebahagian daripada rangka kerja go-zero dan digunakan secara khusus untuk operasi pangkalan data. stor ialah lapisan storan data rangka kerja go-zero. Pakej logx ialah perpustakaan pengelogan yang disediakan oleh rangka kerja go-zero, yang boleh membantu kami merekodkan peristiwa penting.

4. Integrasikan ETCD, dsb.

Menggunakan rangka kerja go-zero, kami boleh dengan mudah menyepadukan beberapa alatan dan perkhidmatan yang biasa digunakan, seperti ETCD, Redis, ZooKeeper, dsb. Secara khusus, kami boleh mengimport perpustakaan berkaitan yang disediakan oleh go-zero dalam kod dan mengkonfigurasi maklumat yang berkaitan dalam fail konfigurasi.

Berikut ialah beberapa kaedah penyepaduan yang biasa digunakan:

1 Integrasikan ETCD

Mula-mula, tambah maklumat berikut dalam fail konfigurasi:

rreee

Kemudian. , dalam Untuk menggunakan kod etcd, gunakan fungsi clientv3.New untuk mencipta klien etcd baharu.

[etcd]
host = "localhost:2379"
Salin selepas log masuk

Kod di atas akan mencipta klien ETCD bernama klien, yang akan menggunakan localhost:2379 sebagai alamat pelayan ETCD.

2. Integrasikan Redis

Untuk menggunakan Redis, kami perlu menambah maklumat berikut dalam fail konfigurasi:

import (
    "go.etcd.io/etcd/clientv3"
)

client, err := clientv3.New(clientv3.Config{
    Endpoints:   []string{"localhost:2379"},
    DialTimeout: 5 * time.Second,
})
if err != nil {
    panic(err)
}
Salin selepas log masuk

Kemudian, dalam kod yang anda mahu gunakan Redis , gunakan redis Fungsi NewClient mencipta klien Redis baharu.

[redis]
host = "localhost:6379"
password = ""
db = 0
Salin selepas log masuk

Kod di atas akan mencipta klien Redis baharu, yang akan menggunakan localhost:6379 sebagai alamat pelayan Redis, tiada kata laluan dan menggunakan DB lalai.

3. Integrasikan ZooKeeper

要使用ZooKeeper,我们需要在配置文件中添加以下信息:

[zookeeper]
host = "localhost:2181"
Salin selepas log masuk

然后,在要使用ZooKeeper的代码中,使用zk.Connect函数创建一个新的ZooKeeper客户端。

import (
    "github.com/samuel/go-zookeeper/zk"
    "time"
)

conn, _, err := zk.Connect([]string{"localhost:2181"}, time.Second*5)
if err != nil {
    panic(err)
}
Salin selepas log masuk

上述代码将创建一个名为conn的ZooKeeper客户端,它将使用localhost:2181作为ZooKeeper服务器的地址。

五、总结

到目前为止,我们已经深入了解了go-zero框架,并学到了如何使用它来构建高性能服务。

总结一下,要使用go-zero,请先安装和配置相关环境,然后创建一个新的项目,通过goctl命令行工具自动生成模板代码和配置文件。

接着,可以使用go-zero提供的各种功能和服务来逐步完善和扩展我们的应用程序,如集成数据库、ETCD、Redis等。

将go-zero框架用于您的下一个项目吧,它将使您能够构建出更加灵活、高效和可靠的服务!

Atas ialah kandungan terperinci Dari kemasukan kepada kemahiran: Menguasai rangka kerja go-zero. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

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

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Hasilkan PPT dengan satu klik! Kimi: Biarlah 'pekerja migran PPT' menjadi popular dahulu Hasilkan PPT dengan satu klik! Kimi: Biarlah 'pekerja migran PPT' menjadi popular dahulu Aug 01, 2024 pm 03:28 PM

Kimi: Hanya dalam satu ayat, dalam sepuluh saat sahaja, PPT akan siap. PPT sangat menjengkelkan! Untuk mengadakan mesyuarat, anda perlu mempunyai PPT; untuk menulis laporan mingguan, anda perlu mempunyai PPT untuk membuat pelaburan, anda perlu menunjukkan PPT walaupun anda menuduh seseorang menipu, anda perlu menghantar PPT. Kolej lebih seperti belajar jurusan PPT Anda menonton PPT di dalam kelas dan melakukan PPT selepas kelas. Mungkin, apabila Dennis Austin mencipta PPT 37 tahun lalu, dia tidak menyangka satu hari nanti PPT akan berleluasa. Bercakap tentang pengalaman sukar kami membuat PPT membuatkan kami menitiskan air mata. "Ia mengambil masa tiga bulan untuk membuat PPT lebih daripada 20 muka surat, dan saya menyemaknya berpuluh-puluh kali. Saya rasa ingin muntah apabila saya melihat PPT itu." ialah PPT." Jika anda mengadakan mesyuarat dadakan, anda harus melakukannya

Semua anugerah CVPR 2024 diumumkan! Hampir 10,000 orang menghadiri persidangan itu di luar talian dan seorang penyelidik Cina dari Google memenangi anugerah kertas terbaik Semua anugerah CVPR 2024 diumumkan! Hampir 10,000 orang menghadiri persidangan itu di luar talian dan seorang penyelidik Cina dari Google memenangi anugerah kertas terbaik Jun 20, 2024 pm 05:43 PM

Pada awal pagi 20 Jun, waktu Beijing, CVPR2024, persidangan penglihatan komputer antarabangsa teratas yang diadakan di Seattle, secara rasmi mengumumkan kertas kerja terbaik dan anugerah lain. Pada tahun ini, sebanyak 10 kertas memenangi anugerah, termasuk 2 kertas terbaik dan 2 kertas pelajar terbaik Selain itu, terdapat 2 pencalonan kertas terbaik dan 4 pencalonan kertas pelajar terbaik. Persidangan teratas dalam bidang visi komputer (CV) ialah CVPR, yang menarik sejumlah besar institusi penyelidikan dan universiti setiap tahun. Mengikut statistik, sebanyak 11,532 kertas telah diserahkan tahun ini, 2,719 daripadanya diterima, dengan kadar penerimaan 23.6%. Menurut analisis statistik data CVPR2024 Institut Teknologi Georgia, dari perspektif topik penyelidikan, bilangan kertas terbesar ialah sintesis dan penjanaan imej dan video (Imageandvideosyn

Daripada logam kosong kepada model besar dengan 70 bilion parameter, berikut ialah tutorial dan skrip sedia untuk digunakan Daripada logam kosong kepada model besar dengan 70 bilion parameter, berikut ialah tutorial dan skrip sedia untuk digunakan Jul 24, 2024 pm 08:13 PM

Kami tahu bahawa LLM dilatih pada kelompok komputer berskala besar menggunakan data besar-besaran Tapak ini telah memperkenalkan banyak kaedah dan teknologi yang digunakan untuk membantu dan menambah baik proses latihan LLM. Hari ini, perkara yang ingin kami kongsikan ialah artikel yang mendalami teknologi asas dan memperkenalkan cara menukar sekumpulan "logam kosong" tanpa sistem pengendalian pun menjadi gugusan komputer untuk latihan LLM. Artikel ini datang daripada Imbue, sebuah permulaan AI yang berusaha untuk mencapai kecerdasan am dengan memahami cara mesin berfikir. Sudah tentu, mengubah sekumpulan "logam kosong" tanpa sistem pengendalian menjadi gugusan komputer untuk latihan LLM bukanlah proses yang mudah, penuh dengan penerokaan dan percubaan dan kesilapan, tetapi Imbue akhirnya berjaya melatih LLM dengan 70 bilion parameter proses terkumpul

AI sedang digunakan |. AI mencipta vlog kehidupan seorang gadis yang tinggal bersendirian, yang menerima berpuluh ribu suka dalam masa 3 hari AI sedang digunakan |. AI mencipta vlog kehidupan seorang gadis yang tinggal bersendirian, yang menerima berpuluh ribu suka dalam masa 3 hari Aug 07, 2024 pm 10:53 PM

Editor Laporan Kuasa Mesin: Yang Wen Gelombang kecerdasan buatan yang diwakili oleh model besar dan AIGC telah mengubah cara kita hidup dan bekerja secara senyap-senyap, tetapi kebanyakan orang masih tidak tahu cara menggunakannya. Oleh itu, kami telah melancarkan lajur "AI dalam Penggunaan" untuk memperkenalkan secara terperinci cara menggunakan AI melalui kes penggunaan kecerdasan buatan yang intuitif, menarik dan padat serta merangsang pemikiran semua orang. Kami juga mengalu-alukan pembaca untuk menyerahkan kes penggunaan yang inovatif dan praktikal. Pautan video: https://mp.weixin.qq.com/s/2hX_i7li3RqdE4u016yGhQ Baru-baru ini, vlog kehidupan seorang gadis yang tinggal bersendirian menjadi popular di Xiaohongshu. Animasi gaya ilustrasi, ditambah dengan beberapa perkataan penyembuhan, boleh diambil dengan mudah dalam beberapa hari sahaja.

Mengira 12 titik kesakitan RAG, arkitek kanan NVIDIA mengajar penyelesaian Mengira 12 titik kesakitan RAG, arkitek kanan NVIDIA mengajar penyelesaian Jul 11, 2024 pm 01:53 PM

Retrieval-augmented generation (RAG) ialah teknik yang menggunakan perolehan semula untuk meningkatkan model bahasa. Secara khusus, sebelum model bahasa menjana jawapan, ia mendapatkan semula maklumat yang berkaitan daripada pangkalan data dokumen yang luas dan kemudian menggunakan maklumat ini untuk membimbing proses penjanaan. Teknologi ini boleh meningkatkan ketepatan dan perkaitan kandungan dengan banyak, mengurangkan masalah halusinasi dengan berkesan, meningkatkan kelajuan kemas kini pengetahuan, dan meningkatkan kebolehkesanan penjanaan kandungan. RAG sudah pasti salah satu bidang penyelidikan kecerdasan buatan yang paling menarik. Untuk butiran lanjut tentang RAG, sila rujuk artikel lajur di tapak ini "Apakah perkembangan baharu dalam RAG, yang pakar dalam menebus kekurangan model besar?" Ulasan ini menerangkannya dengan jelas." Tetapi RAG tidak sempurna, dan pengguna sering menghadapi beberapa "titik kesakitan" apabila menggunakannya. Baru-baru ini, penyelesaian AI generatif termaju NVIDIA

Bagaimana untuk menilai keberkesanan kos sokongan komersial untuk rangka kerja Java Bagaimana untuk menilai keberkesanan kos sokongan komersial untuk rangka kerja Java Jun 05, 2024 pm 05:25 PM

Menilai kos/prestasi sokongan komersial untuk rangka kerja Java melibatkan langkah-langkah berikut: Tentukan tahap jaminan yang diperlukan dan jaminan perjanjian tahap perkhidmatan (SLA). Pengalaman dan kepakaran pasukan sokongan penyelidikan. Pertimbangkan perkhidmatan tambahan seperti peningkatan, penyelesaian masalah dan pengoptimuman prestasi. Timbang kos sokongan perniagaan terhadap pengurangan risiko dan peningkatan kecekapan.

Seorang lagi pemain tahap Sora akan datang ke jalanan! Kami membandingkannya dengan Sora dan Keling. Seorang lagi pemain tahap Sora akan datang ke jalanan! Kami membandingkannya dengan Sora dan Keling. Aug 02, 2024 am 10:19 AM

Apabila Sora gagal keluar, lawan OpenAI menggunakan senjata mereka untuk memusnahkan jalanan. Jika Sora tidak dibuka untuk digunakan, ia benar-benar akan dicuri! Hari ini, LumaAI pemula San Francisco memainkan kad truf dan melancarkan generasi baharu model penjanaan video AI DreamMachine. Percuma dan tersedia untuk semua orang. Menurut laporan, model itu boleh menghasilkan video realistik berkualiti tinggi berdasarkan penerangan teks ringkas, dengan kesan yang setanding dengan Sora. Sebaik sahaja berita itu keluar, sebilangan besar pengguna menyerbu ke laman web rasmi untuk mencubanya. Walaupun pegawai mendakwa model itu boleh menjana video 120 bingkai dalam masa dua minit sahaja, ramai pengguna telah menunggu berjam-jam di laman web rasmi berikutan lonjakan kunjungan. BarkleyDai, ketua pertumbuhan produk Luma, terpaksa mengulas mengenai Discord

Bagaimanakah keluk pembelajaran rangka kerja PHP berbanding rangka kerja bahasa lain? Bagaimanakah keluk pembelajaran rangka kerja PHP berbanding rangka kerja bahasa lain? Jun 06, 2024 pm 12:41 PM

Keluk pembelajaran rangka kerja PHP bergantung pada kecekapan bahasa, kerumitan rangka kerja, kualiti dokumentasi dan sokongan komuniti. Keluk pembelajaran rangka kerja PHP adalah lebih tinggi jika dibandingkan dengan rangka kerja Python dan lebih rendah jika dibandingkan dengan rangka kerja Ruby. Berbanding dengan rangka kerja Java, rangka kerja PHP mempunyai keluk pembelajaran yang sederhana tetapi masa yang lebih singkat untuk bermula.

See all articles