Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah fungsi teras perniagaan yang boleh dicapai oleh pembangunan perkhidmatan mikro Golang?

Apakah fungsi teras perniagaan yang boleh dicapai oleh pembangunan perkhidmatan mikro Golang?

WBOY
WBOYasal
2023-09-18 11:31:481240semak imbas

Apakah fungsi teras perniagaan yang boleh dicapai oleh pembangunan perkhidmatan mikro Golang?

Apakah fungsi teras perniagaan yang boleh dicapai oleh pembangunan perkhidmatan mikro Golang?

Dengan perkembangan pesat pengkomputeran awan dan teknologi kontena, seni bina perkhidmatan mikro telah menjadi salah satu aliran arus perdana dalam pembangunan aplikasi moden. Sebagai bahasa pengaturcaraan yang cekap, boleh dipercayai dan serentak, Golang telah menjadi pilihan ideal untuk membina perkhidmatan mikro.

Dalam pembangunan perkhidmatan mikro Golang, kami boleh mencapai fungsi perniagaan teras berikut:

  1. Pembangunan antara muka API RESTful
    Sebagai asas perkhidmatan mikro, antara muka API RESTful membolehkan komunikasi dan interaksi antara perkhidmatan yang berbeza. Golang menyediakan perpustakaan HTTP yang kaya untuk membangunkan dan mendedahkan antara muka API RESTful dengan mudah. Berikut ialah contoh mudah:
package main

import (
    "fmt"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/hello", helloHandler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

func helloHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello, World!")
}
  1. Integrasi Pangkalan Data
    Perkhidmatan mikro selalunya perlu berinteraksi dengan pangkalan data, seperti menyimpan dan mendapatkan semula data. Pustaka standard Golang menyediakan sokongan untuk pangkalan data SQL dan NoSQL, seperti MySQL, PostgreSQL, MongoDB, dsb. Berikut ialah contoh penggunaan Golang untuk mengendalikan pangkalan data MySQL:
package main

import (
    "database/sql"
    "fmt"
    "log"

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

func main() {
    db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/database")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    rows, err := db.Query("SELECT * FROM users")
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()

    for rows.Next() {
        var id int
        var name string
        err = rows.Scan(&id, &name)
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(id, name)
    }
}
  1. Baris gilir mesej dan pemprosesan tugas tak segerak
    Dalam seni bina perkhidmatan mikro, baris gilir mesej digunakan untuk memisahkan komunikasi antara perkhidmatan yang berbeza untuk melaksanakan pemprosesan tugas tak segerak, penghantaran mesej , dsb. Fungsi. Golang menyediakan berbilang perpustakaan baris gilir mesej yang sangat baik, seperti RabbitMQ, NATS, dsb. Berikut ialah contoh menghantar mesej kepada RabbitMQ menggunakan Golang:
package main

import (
    "log"

    "github.com/streadway/amqp"
)

func main() {
    conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()

    ch, err := conn.Channel()
    if err != nil {
        log.Fatal(err)
    }
    defer ch.Close()

    q, err := ch.QueueDeclare(
        "hello",
        false,
        false,
        false,
        false,
        nil,
    )
    if err != nil {
        log.Fatal(err)
    }

    err = ch.Publish(
        "",
        q.Name,
        false,
        false,
        amqp.Publishing{
            ContentType: "text/plain",
            Body:        []byte("Hello, RabbitMQ!"),
        },
    )
    if err != nil {
        log.Fatal(err)
    }
}
  1. Pengesahan dan Keizinan
    Pengesahan dan kebenaran dalam perkhidmatan mikro adalah bahagian penting dalam melindungi keselamatan perkhidmatan. Golang menyediakan perpustakaan untuk pelbagai mekanisme pengesahan dan kebenaran, seperti JWT, OAuth2, dsb. Berikut ialah contoh penggunaan Golang untuk melaksanakan pengesahan JWT:
package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/dgrijalva/jwt-go"
)

var jwtKey = []byte("secret_key")

type Claims struct {
    Username string `json:"username"`
    jwt.StandardClaims
}

func main() {
    http.HandleFunc("/login", loginHandler)
    http.HandleFunc("/protected", authMiddleware(protectedHandler))
    log.Fatal(http.ListenAndServe(":8080", nil))
}

func loginHandler(w http.ResponseWriter, r *http.Request) {
    username := r.FormValue("username")
    password := r.FormValue("password")

    if username == "admin" && password == "admin" {
        token := jwt.NewWithClaims(jwt.SigningMethodHS256, Claims{
            Username: username,
        })

        tokenString, err := token.SignedString(jwtKey)
        if err != nil {
            log.Fatal(err)
        }

        fmt.Fprintln(w, tokenString)
    } else {
        w.WriteHeader(http.StatusUnauthorized)
        fmt.Fprintln(w, "Username or password incorrect")
    }
}

func protectedHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Protected resource")
}

func authMiddleware(next http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        tokenString := r.Header.Get("Authorization")
        token, err := jwt.ParseWithClaims(tokenString, &Claims{}, func(token *jwt.Token) (interface{}, error) {
            return jwtKey, nil
        })

        if claims, ok := token.Claims.(*Claims); ok && token.Valid {
            fmt.Println(claims.Username)
            next(w, r)
        } else {
            w.WriteHeader(http.StatusUnauthorized)
            fmt.Fprintln(w, "Unauthorized")
        }
    }
}

Dengan menggunakan Golang untuk membangunkan perkhidmatan mikro, kami boleh melaksanakan fungsi perniagaan teras seperti pembangunan antara muka API RESTful, penyepaduan pangkalan data, baris gilir mesej dan pemprosesan tugas tak segerak, pengesahan dan kebenaran . Ciri kesederhanaan, kecekapan dan keselarasan Golang menjadikan pembinaan perkhidmatan mikro yang boleh dipercayai lebih mudah dan lebih cekap.

Atas ialah kandungan terperinci Apakah fungsi teras perniagaan yang boleh dicapai oleh pembangunan perkhidmatan mikro 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