Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pembangunan ekologi komuniti fungsi golang

Pembangunan ekologi komuniti fungsi golang

WBOY
WBOYasal
2024-04-28 14:36:01977semak imbas

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
        }
    }
}

Atas ialah kandungan terperinci Pembangunan ekologi komuniti fungsi 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