golang api build

May 21, 2023 pm 02:11 PM

Golang ialah bahasa pengaturcaraan yang direka khas untuk membina perkhidmatan konkurensi tinggi dan aplikasi rangkaian. Golang mempunyai keupayaan konkurensi dan pengaturcaraan rangkaian yang cekap, yang menjadikannya pilihan pertama banyak pembangun. Untuk membina API Golang, kita perlu menguasai banyak konsep dan kemahiran asas, daripada pemprosesan penghalaan kepada akses pangkalan data dan banyak lagi. Artikel ini akan memperkenalkan cara menggunakan Golang untuk membina API.

1. Persediaan persekitaran

Sebelum anda mula membina API Golang, anda perlu memasang Golang pada komputer anda. Anda boleh memuat turun versi terkini Golang melalui tapak web rasmi Golang (https://golang.org/), atau memasangnya melalui pengurus pakej, seperti apt-get atau yum, dsb. Selepas pemasangan selesai, masukkan "versi pergi" dalam terminal untuk mengesahkan sama ada pemasangan berjaya.

2. Pemasangan pakej dependency

Gunakan arahan "go get" dalam terminal untuk memasang pakej dependency yang diperlukan. Pakej bergantung ialah beberapa perpustakaan yang sering kami gunakan dalam API, seperti "gorilla/mux" dan "gorm". Kaedah pemasangan adalah seperti berikut:

go get github.com/gorilla/mux 
go get github.com/jinzhu/gorm 
go get github.com/go-sql-driver/mysql
Salin selepas log masuk

3 Pemprosesan penghalaan

Semua permintaan API perlu diselesaikan melalui penghalaan. Salah satu pakej penghalaan yang paling popular di Golang ialah gorila/mux, jadi kami akan menggunakannya juga.

Untuk menggunakan gorila/mux, kita perlu mengimport pakej dan mencipta objek mux baharu. Dalam contoh ini, kami akan mencipta dua laluan, satu untuk memaparkan halaman utama API dan satu lagi untuk mengendalikan permintaan GET kami.

package main

import (
    "fmt"
    "net/http"

    "github.com/gorilla/mux"
)

func main() {
    router := mux.NewRouter()

    router.HandleFunc("/", Index)
    router.HandleFunc("/tasks", getTasks).Methods("GET")

    http.ListenAndServe(":8000", router)
}

func Index(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Welcome to my API!")
}

func getTasks(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "You have requested all tasks")
}
Salin selepas log masuk

Dalam kod di atas, kami mencipta dua fungsi pengendali, Indeks dan getTasks. Fungsi Indeks digunakan untuk memaparkan halaman utama API dan getTasks mengendalikan semua permintaan GET.

4. Akses pangkalan data

Kini kami akan menambah fungsi pangkalan data pada API. Dalam contoh ini, kami akan menggunakan pangkalan data MySQL dan menggunakan perpustakaan gorm untuk mengurus data.

Pertama, kita perlu membuat sambungan pangkalan data. Untuk melakukan ini, kita perlu mencipta struct Pangkalan Data yang mengandungi butiran sambungan. Seterusnya, kami akan mencipta fungsi "openDB" baharu untuk membuka sambungan.

...

import (
    "database/sql"
    "log"

    _ "github.com/go-sql-driver/mysql"
    "github.com/jinzhu/gorm"
)

type Database struct {
    *gorm.DB
}

func (db *Database) openDB() {
    dsn := "username:password@tcp(127.0.0.1:3306)/godb?charset=utf8&parseTime=True"
    conn, err := sql.Open("mysql", dsn)
    if err != nil {
        log.Fatal(err)
    }

    db.DB = gorm.Open("mysql", conn)
}
Salin selepas log masuk

Kami kini perlu mencipta objek Pangkalan Data baharu dalam fungsi utama dan membuka sambungan menggunakan fungsi openDB.

db := new(Database)
db.openDB()
Salin selepas log masuk

Seterusnya, kami akan mencipta Model Tugasan untuk dikaitkan dengan senarai tugas kami. Model hanyalah struct Go biasa yang akan dipetakan ke jadual dalam pangkalan data MySQL kami.

type Task struct {
    Id      int    `gorm:"primary_key;auto_increment"`
    Name    string `gorm:"not null"`
    Content string `gorm:"not null"`
}
Salin selepas log masuk

Untuk mencipta tugasan baharu, kami akan mencipta fungsi pengendali yang dipanggil "createTask". Fungsi ini akan menerima data JSON daripada permintaan HTTP, menghuraikannya dan memasukkannya ke dalam pangkalan data kami.

func createTask(w http.ResponseWriter, r *http.Request) {
    db := new(Database)
    db.openDB()

    task := &Task{}
    task.Name = r.FormValue("name")
    task.Content = r.FormValue("content")

    db.Create(&task)
    fmt.Fprintln(w, "Task successfully created")
}
Salin selepas log masuk

Kami melihat bahawa fungsi "createTask" mencipta objek Pangkalan Data baharu dan objek Tugas pada mulanya. Ia kemudian menghuraikan data JSON daripada permintaan HTTP dan memasukkannya ke dalam pangkalan data dengan memanggil kaedah db.Create().

Akhir sekali, kami akan mengemas kini laluan "router.HandleFunc" kami untuk memasukkan laluan baharu.

router.HandleFunc("/tasks", createTask).Methods("POST")
Salin selepas log masuk

5. Middleware

Middleware ialah teknologi biasa yang digunakan untuk melaksanakan operasi sebelum atau selepas memproses permintaan. Mereka bukan sahaja digunakan secara meluas di Golang tetapi juga biasa dalam bahasa lain. Mari lihat cara menggunakan perisian tengah untuk menambah beberapa fungsi tambahan dalam API Golang.

Di Golang, middleware ialah fungsi yang mengambil fungsi pemprosesan HTTP sebagai parameter. Mereka membenarkan beberapa logik untuk dilaksanakan sebelum atau selepas permintaan diproses. Dalam contoh berikut, kami akan mencipta perisian tengah yang dipanggil "withLogging" yang akan log butiran semua permintaan API.

func withLogging(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        log.Println(r.Method, r.URL.Path)
        next.ServeHTTP(w, r)
    })
}
Salin selepas log masuk

Kami melihat bahawa fungsi http.Handler baharu dikembalikan dalam fungsi, yang merekodkan kaedah yang diminta dan laluan URL. Pernyataan seterusnya.ServeHTTP(w, r) memanggil pengendali seterusnya, memastikan pengendali terus memproses permintaan API.

Seterusnya, kami akan mengemas kini laluan dan pengendali kami untuk memasukkan perisian tengah pengelogan baharu.

router := mux.NewRouter()

router.Use(withLogging)

router.HandleFunc("/", Index)
router.HandleFunc("/tasks", createTask).Methods("POST")
router.HandleFunc("/tasks", getTasks).Methods("GET")
Salin selepas log masuk

Sekarang, tambahkan pernyataan "router.Use(withLogging)" sebelum laluan dan kami akan melaksanakan middleware withLogging pada semua permintaan penghalaan.

6. Ringkasan

Dalam artikel ini, kami memperkenalkan cara menggunakan gorila/mux untuk mengendalikan penghalaan di Golang, menggunakan gorm untuk mengurus pangkalan data MySQL dan cara menggunakan perisian tengah untuk meningkatkan API kami. Dengan memahami konsep dan kemahiran asas ini, kita boleh mula membina API Golang yang lebih kompleks.

Atas ialah kandungan terperinci golang api build. 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

Tag artikel 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)

GO Language Pack Import: Apakah perbezaan antara garis bawah dan tanpa garis bawah? GO Language Pack Import: Apakah perbezaan antara garis bawah dan tanpa garis bawah? Mar 03, 2025 pm 05:17 PM

GO Language Pack Import: Apakah perbezaan antara garis bawah dan tanpa garis bawah?

Bagaimana untuk melaksanakan pemindahan maklumat jangka pendek antara halaman dalam kerangka beego? Bagaimana untuk melaksanakan pemindahan maklumat jangka pendek antara halaman dalam kerangka beego? Mar 03, 2025 pm 05:22 PM

Bagaimana untuk melaksanakan pemindahan maklumat jangka pendek antara halaman dalam kerangka beego?

Bagaimana cara menukar senarai hasil pertanyaan mysql ke dalam slice struktur tersuai dalam bahasa Go? Bagaimana cara menukar senarai hasil pertanyaan mysql ke dalam slice struktur tersuai dalam bahasa Go? Mar 03, 2025 pm 05:18 PM

Bagaimana cara menukar senarai hasil pertanyaan mysql ke dalam slice struktur tersuai dalam bahasa Go?

Bagaimana saya menulis objek dan stub untuk ujian di GO? Bagaimana saya menulis objek dan stub untuk ujian di GO? Mar 10, 2025 pm 05:38 PM

Bagaimana saya menulis objek dan stub untuk ujian di GO?

Bagaimana saya boleh menentukan kekangan jenis tersuai untuk generik di GO? Bagaimana saya boleh menentukan kekangan jenis tersuai untuk generik di GO? Mar 10, 2025 pm 03:20 PM

Bagaimana saya boleh menentukan kekangan jenis tersuai untuk generik di GO?

Bagaimana saya boleh menggunakan alat pengesanan untuk memahami aliran pelaksanaan aplikasi saya? Bagaimana saya boleh menggunakan alat pengesanan untuk memahami aliran pelaksanaan aplikasi saya? Mar 10, 2025 pm 05:36 PM

Bagaimana saya boleh menggunakan alat pengesanan untuk memahami aliran pelaksanaan aplikasi saya?

Bagaimana anda menulis ujian unit di GO? Bagaimana anda menulis ujian unit di GO? Mar 21, 2025 pm 06:34 PM

Bagaimana anda menulis ujian unit di GO?

Bagaimana cara menulis fail dalam bahasa Go dengan mudah? Bagaimana cara menulis fail dalam bahasa Go dengan mudah? Mar 03, 2025 pm 05:15 PM

Bagaimana cara menulis fail dalam bahasa Go dengan mudah?

See all articles