Rumah > pembangunan bahagian belakang > Golang > 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
Lepaskan: 2023-09-18 11:31:48
asal
1327 orang telah melayarinya

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!")
}
Salin selepas log masuk
  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)
    }
}
Salin selepas log masuk
  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)
    }
}
Salin selepas log masuk
  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")
        }
    }
}
Salin selepas log masuk

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!

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