Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk melaksanakan paging pertanyaan dalam golang

Bagaimana untuk melaksanakan paging pertanyaan dalam golang

PHPz
PHPzasal
2023-04-05 13:49:001966semak imbas

Bahasa Go ialah salah satu bahasa pengaturcaraan yang sangat popular dalam beberapa tahun kebelakangan ini Dengan kelebihan kecekapan tinggi dan kebolehskalaan yang kuat, ia digunakan secara meluas oleh semakin ramai pembangun dalam pelbagai bidang. Antaranya, fungsi halaman pertanyaan golang digunakan secara meluas dan merupakan keperluan fungsi biasa dalam banyak aplikasi peringkat perusahaan. Artikel ini akan memperkenalkan secara terperinci kaedah pelaksanaan dan contoh halaman pertanyaan golang.

1. Kaedah pelaksanaan kelui pertanyaan golang

1 Menggunakan rangka kerja ORM

ORM (Pemetaan Perkaitan Objek) ialah pemetaan antara objek dan pangkalan data hubungan Teknologi pengaturcaraan juga idea pengaturcaraan. Rangka kerja ORM ialah teknologi yang agak matang Contohnya, GORM dalam golang ialah rangka kerja ORM sumber terbuka Ia boleh memetakan struktur dan jadual pangkalan data, dan menukar operasi CRUD ke penyata pertanyaan pangkalan data, dengan itu mencapai penyimpanan dan pembacaan Data.

GORM ialah salah satu rangka kerja ORM paling popular di golang Ia menyediakan operasi API yang sangat mudah, malah pemula boleh bermula dengan mudah. Menggunakan GORM, kami boleh melaksanakan pertanyaan paging dengan mudah berdasarkan SQL Kod pelaksanaan khusus adalah seperti berikut:

func FindPage(pageNum int, pageSize int) (users []User, total int64, err error) {
    tx := db.Model(&User{})
    tx.Count(&total)
    err = tx.Offset((pageNum - 1)*pageSize).Limit(pageSize).Find(&users).Error
    if err != nil && err != gorm.ErrRecordNotFound {
        return nil, 0, err
    }
    return
}

Dalam kod di atas, kami mentakrifkan fungsi bernama FindPage untuk melaksanakan pertanyaan paging. Mula-mula, kami memperoleh model Pengguna melalui kaedah db.Model(), kemudian panggil kaedah Count() untuk mengira jumlah bilangan rekod yang ditanya kemudian, gunakan kaedah Offset dan Had untuk melaksanakan paging, dan akhirnya panggil Find(; ) kaedah untuk menyimpan keputusan pertanyaan dalam pembolehubah pengguna. Di samping itu, semasa proses pertanyaan, perhatian khusus perlu diberikan kepada pengendalian ralat untuk memastikan keselamatan dan kebolehpercayaan panggilan fungsi.

2. Fungsi pertanyaan paging tersuai

Dalam aplikasi sebenar, anda juga boleh menentukan fungsi pertanyaan paging anda sendiri untuk memenuhi keperluan perniagaan dengan lebih baik. Kaedah pelaksanaan khusus adalah seperti berikut:

func CustomFindPage(pageNum int, pageSize int, query string) (users []User, total int64, err error) {
    sql := "SELECT * FROM users WHERE 1 = 1 " + query + " ORDER BY created_at DESC LIMIT ? OFFSET ?"
    err = db.Raw(sql, pageSize, (pageNum-1)*pageSize).Scan(&users).Error
    if err != nil && err != gorm.ErrRecordNotFound {
        return nil, 0, err
    }
    err = db.Model(&User{}).Where(query).Count(&total).Error
    if err != nil {
        return nil, 0, err
    }
    return
}

Berbeza daripada rangka kerja ORM, kaedah ini dilaksanakan menggunakan pernyataan SQL asli, dan syarat pertanyaan serta pernyataan pertanyaan boleh ditakrifkan secara bebas untuk memenuhi keperluan perniagaan dengan lebih baik.

2. Contoh paging pertanyaan golang

1. Rangka kerja ORM melaksanakan pertanyaan paging

Rujuk kod berikut:

type User struct {
    gorm.Model
    Name string `gorm:"column:name" json:"name"`
    Age  int    `gorm:"column:age" json:"age"`
}

func main() {
    db, err := gorm.Open("mysql", "user:password@tcp(127.0.0.1:3306)/demo_golang?charset=utf8mb4&parseTime=True&loc=Local")
    if err != nil {
        panic(err)
    }
    defer db.Close()

    var (
        pageNum  = 1
        pageSize = 10
        users    []User
        total    int64
    )
    if users, total, err = FindPage(pageNum, pageSize); err != nil {
        fmt.Printf("查询用户列表失败:%v\n", err)
        return
    }
    fmt.Printf("查询到的用户列表如下:\n%+v\n总记录数:%d\n", users, total)
}

Kod di atas melaksanakan paging berdasarkan Fungsi pertanyaan paging rangka kerja ORM. Antaranya, anda perlu menentukan model Pengguna terlebih dahulu dan membina pangkalan data melalui GORM. Kemudian, tentukan fungsi pertanyaan bernama FindPage(), yang mengandungi dua parameter, pageNum dan pageSize, untuk menanyakan data nombor halaman yang ditentukan dan bilangan rekod yang dipaparkan pada setiap halaman. Fungsi ini mengembalikan dua nilai, satu ialah senarai pengguna yang ditanya, dan satu lagi ialah jumlah bilangan rekod dalam senarai. Akhir sekali, panggil fungsi FindPage() dalam fungsi utama untuk bertanya dan mengeluarkan hasil pertanyaan halaman.

2. Fungsi tersuai untuk melaksanakan pertanyaan paging

Rujuk kod berikut:

type User struct {
    Name      string `gorm:"column:name" json:"name"`
    Age       int    `gorm:"column:age" json:"age"`
    CreatedAt int64  `gorm:"column:created_at" json:"created_at"`
}

func main() {
    db, err := gorm.Open("mysql", "user:password@tcp(127.0.0.1:3306)/demo_golang?charset=utf8mb4&parseTime=True&loc=Local")
    if err != nil {
        panic(err)
    }
    defer db.Close()

    var (
        pageNum  = 1
        pageSize = 10
        order    = "DESC"
        field    = "created_at"
        query    = ""
        users    []User
        total    int64
    )
    if users, total, err = CustomFindPage(pageNum, pageSize, query, field, order); err != nil {
        fmt.Printf("查询用户列表失败:%v\n", err)
        return
    }
    fmt.Printf("查询到的用户列表如下:\n%+v\n总记录数:%d\n", users, total)
}

Kod di atas melaksanakan fungsi paging pertanyaan berdasarkan fungsi pertanyaan paging tersuai . Antaranya, anda perlu mentakrifkan model Pengguna dahulu, tetapkan parameter pertanyaan (pageNum, pageSize, medan, pesanan, pertanyaan) dalam fungsi utama, dan kemudian panggil fungsi CustomFindPage() untuk melaksanakan pertanyaan paging. Perlu diingatkan bahawa dalam fungsi pertanyaan tersuai, anda perlu menyambung secara manual pernyataan SQL dan syarat pertanyaan, dan menggunakan pernyataan SQL asli untuk membuat pertanyaan. Di samping itu, kami boleh mengubah suai fungsi pertanyaan halaman tersuai mengikut keperluan khusus untuk mencapai pertanyaan yang lebih fleksibel.

3. Ringkasan

Artikel ini memperkenalkan kaedah pelaksanaan dan contoh paging pertanyaan golang, daripada penggunaan asas rangka kerja ORM kepada fungsi pertanyaan paging tersuai, meliputi kaedah pertanyaan biasa dalam aplikasi praktikal. Sama ada anda seorang pemula atau pembangun Golang yang berpengalaman, anda boleh mempelajari kaedah pelaksanaan khusus dan memahami lebih lanjut ciri dan teknologi bahasa Golang.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan paging pertanyaan dalam golang. 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