Quelles fonctions commerciales de base peuvent être réalisées avec le développement de microservices Golang ?
Avec le développement rapide du cloud computing et de la technologie des conteneurs, l'architecture des microservices est devenue l'une des tendances dominantes du développement d'applications modernes. En tant que langage de programmation efficace, fiable et simultané, Golang est devenu un choix idéal pour créer des microservices.
Dans le développement de microservices Golang, nous pouvons réaliser les fonctions commerciales de base suivantes :
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!") }
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) } }
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) } }
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") } } }
En utilisant Golang pour développer des microservices, nous pouvons implémenter des fonctions commerciales de base telles que le développement d'interface API RESTful, l'intégration de bases de données, la file d'attente de messages et le traitement, l'authentification et l'autorisation de tâches asynchrones. . La simplicité, l'efficacité et les fonctionnalités de concurrence de Golang rendent la création de microservices fiables plus facile et plus efficace.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!