Pembangunan ekologi komuniti fungsi golang

WBOY
Lepaskan: 2024-04-28 14:36:01
asal
1022 orang telah melayarinya

Ekosistem fungsi bahasa Go kaya dengan pakej komuniti yang meliputi pelbagai kegunaan, daripada utiliti kepada alatan khusus domain. Pustaka utiliti termasuk: penghala Gorilla Mux, pemacu MySQL, pakej konfigurasi Viper. Alat khusus domain termasuk: AWS SDK, pakej Redigo Redis dan rangka kerja API RESTful Kin-tonik. Dengan menyepadukan pakej ini, pembangun boleh meluaskan fungsi aplikasi dengan mudah, seperti mencipta pelayan HTTP menggunakan pemacu Gorilla Mux dan MySQL.

Pembangunan ekologi komuniti fungsi golang

Ekosistem komuniti yang kaya dengan fungsi Go

Ekosistem fungsi bahasa Go mengandungi banyak pakej yang disumbangkan oleh komuniti, membolehkan pembangun memperluaskan fungsi aplikasi mereka dengan mudah. Pakej ini merangkumi pelbagai kegunaan, daripada utiliti biasa kepada alatan khusus domain.

Pustaka utiliti:

  • github.com/gorilla/mux: Penghala modular untuk membina penghala RESTful berprestasi tinggi
  • github.com/go-sql-driver rasmi untuk pemandu berinteraksi dengan pangkalan data MySQL
  • github.com/spf13/viper: Pakej untuk membaca dan menghuraikan konfigurasi dalam pelbagai format

Alat khusus domain:

  • : agithus.com/shub Suit komprehensif untuk berinteraksi dengan Perkhidmatan Web Amazon (AWS)
  • github.com/gomodule/redigo: Pakej berprestasi tinggi untuk berinteraksi dengan pelayan Redis
github.com /getkin/kin-tonic:

untuk membina API RESTful

Contoh praktikal:

🎜🎜 Mencipta pelayan HTTP mudah menggunakan penghala Gorilla Mux dan pemacu MySQL: 🎜
package main

import (
    "database/sql"
    "fmt"
    "github.com/gorilla/mux"
    _ "github.com/go-sql-driver/mysql"
    "net/http"
)

func main() {
    // 创建 MySQL 数据库连接
    db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/database")
    if err != nil {
        panic(err)
    }
    defer db.Close()

    // 创建一个新的路由器
    router := mux.NewRouter()

    // 注册处理程序函数
    router.HandleFunc("/users", getUsers(db)).Methods(http.MethodGet)
    router.HandleFunc("/users/{id}", getUser(db)).Methods(http.MethodGet)

    // 启动服务器
    fmt.Println("Server listening on port 8080")
    http.ListenAndServe(":8080", router)
}

func getUsers(db *sql.DB) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Content-Type", "application/json")
        rows, err := db.Query("SELECT id, name, email FROM users")
        if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }
        defer rows.Close()

        var users []map[string]interface{}
        for rows.Next() {
            var m = map[string]interface{}{}
            var id int64
            var name, email string
            if err := rows.Scan(&id, &name, &email); err != nil {
                http.Error(w, err.Error(), http.StatusInternalServerError)
                return
            }
            m["id"] = id
            m["name"] = name
            m["email"] = email
            users = append(users, m)
        }

        // 编码响应
        if err := json.NewEncoder(w).Encode(users); err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }
    }
}

func getUser(db *sql.DB) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Content-Type", "application/json")
        vars := mux.Vars(r)
        id := vars["id"]
        row := db.QueryRow("SELECT id, name, email FROM users WHERE id = ?", id)
        var u = map[string]interface{}{}
        var name, email string
        if err := row.Scan(&id, &name, &email); err != nil {
            http.Error(w, err.Error(), http.StatusNotFound)
            return
        }
        u["id"] = id
        u["name"] = name
        u["email"] = email
        // 编码响应
        if err := json.NewEncoder(w).Encode(u); err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Pembangunan ekologi komuniti fungsi golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan