Rumah > Artikel > pembangunan bahagian belakang > Golang melaksanakan proses semakan
Dengan perkembangan pesat Internet, keperluan untuk ketepatan dan keselamatan maklumat semakin tinggi dan lebih tinggi. Oleh itu, dalam kebanyakan tapak web dan sistem, adalah amat penting untuk melaksanakan proses semakan yang lengkap. Artikel ini akan memperkenalkan secara terperinci cara melaksanakan proses audit dengan cepat melalui bahasa Golang.
1. Apakah proses semakan?
Proses semakan biasanya terdiri daripada satu siri pemindahan status dan operasi penyemak adalah untuk memastikan ketepatan, kesempurnaan dan kesahihan maklumat. , termasuk tetapi tidak terhad kepada semakan pendaftaran, semakan artikel, semakan pesanan, dsb. Melaksanakan proses audit yang memenuhi keperluan perniagaan syarikat memainkan peranan yang sangat penting dalam memastikan operasi normal perniagaan dan integriti data.
2. Pengenalan kepada bahasa Golang
Golang ialah bahasa pengaturcaraan yang cekap, ditaip kuat dan sangat sesuai. Ia mempunyai mekanisme pengurusan memori yang sangat baik yang boleh memastikan kestabilan dan kecekapan program di bawah keadaan konkurensi yang tinggi. Berbanding dengan bahasa pengaturcaraan lain, Golang lebih sesuai untuk memproses konkurensi tinggi dan jumlah data yang besar. Selain itu, Golang mudah dipelajari, ringan, dan boleh digunakan di mana-mana platform.
3. Pelaksanaan proses semakan
Mari kita bincangkan cara melaksanakan proses semakan berdasarkan bahasa Golang.
1. Analisis keperluan
Sebelum melaksanakan proses semakan, kita perlu menjalankan analisis keperluan terlebih dahulu. Sebagai contoh, proses semakan artikel adalah seperti berikut:
2. Reka bentuk pangkalan data
Seterusnya, anda perlu mereka bentuk pangkalan data untuk menyimpan maklumat audit. Kami perlu mereka bentuk jadual Artikel, termasuk medan berikut: ID, Tajuk, Kandungan, CreateTime, Status, AuditID, AuditTime. Antaranya, Status mewakili status artikel, AuditID mewakili ID penyemak dan AuditTime mewakili masa semakan.
3. Bina pelayan
Kami perlu membina pelayan HTTP untuk mengendalikan permintaan pelanggan. Kita boleh menggunakan pakej net/http yang disediakan oleh Golang untuk mencapai matlamat ini.
4. Reka bentuk penghalaan
Sebelum membina pelayan HTTP, kita perlu mereka bentuk penghalaan terlebih dahulu. Anda boleh menggunakan rangka kerja penghalaan pihak ketiga seperti gorila/mux untuk mengendalikan permintaan yang berbeza.
5. Pengesahan pengguna
Semasa proses semakan, kami perlu mengesahkan dan membenarkan pengguna. Ini boleh dicapai menggunakan rangka kerja pengesahan pihak ketiga seperti JWT.
6. Serahkan untuk semakan
Dalam proses semakan, artikel perlu menunggu untuk semakan selepas penyerahan. Kita boleh mewakili status artikel melalui medan Status dalam jadual Artikel.
7. Pemprosesan ulasan
Proses semakan memerlukan semakan oleh pengulas dan artikel boleh diterbitkan hanya selepas lulus semakan. Semasa proses audit, juruaudit perlu diperakui, diberi kuasa dan operasi lain, yang boleh dicapai melalui rangka kerja pengesahan pihak ketiga seperti JWT.
8. Pemberitahuan hasil semakan
Selepas semakan selesai, pengarang asal perlu dimaklumkan tentang hasil semakan. Pemberitahuan boleh dihantar melalui e-mel, SMS, WeChat, dll.
4. Kod contoh proses semakan
Seterusnya, kami akan mengambil proses semakan artikel sebagai contoh untuk menunjukkan cara melaksanakannya melalui bahasa Golang.
1. Reka bentuk penghalaan
Gunakan pakej gorila/mux untuk melaksanakan reka bentuk penghalaan:
router := mux.NewRouter() router.HandleFunc("/article/add", AddArticle) router.HandleFunc("/article/list", GetArticles) router.HandleFunc("/audit/list", GetAuditList) router.HandleFunc("/audit/pass", AuditPass) router.HandleFunc("/audit/reject", AuditReject)
2. Pensijilan JWT:
//生成JWT Token func createToken(user string) (string, error) { token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ "user":user, "exp":time.Now().Add(time.Hour * 24).Unix(), }) return token.SignedString([]byte("mysecret")) } //中间件JWT认证 func tokenMiddleware(handler http.HandlerFunc) http.HandlerFunc { return func(writer http.ResponseWriter, request *http.Request) { tokenString := request.Header.Get("Authorization") if tokenString == "" { http.Error(writer, "Token required", http.StatusUnauthorized) return } tokenString = strings.Replace(tokenString, "Bearer ", "", -1) token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { return []byte("mysecret"), nil }) if err != nil || !token.Valid { http.Error(writer, "Unauthorized", http.StatusUnauthorized) return } handler(writer, request) } }
3. Pelaksanaan antara muka HTTP
// 添加文章 func AddArticle(writer http.ResponseWriter, request *http.Request) { title := request.FormValue("title") content := request.FormValue("content") if title == "" || content == "" { http.Error(writer, "Invalid params", http.StatusBadRequest) return } // 获取当前用户 user, ok := request.Context().Value("user").(string) if !ok { http.Error(writer, "Unauthorized", http.StatusUnauthorized) return } // 添加文章 status := "wait" err := db.Exec("INSERT INTO articles (title, content, status, create_time, author) VALUES (?, ?, ?, ?, ?)", title, content, status, time.Now().Unix(), user).Error if err != nil { http.Error(writer, err.Error(), http.StatusBadRequest) return } writer.Write([]byte("success")) } // 获取文章列表 func GetArticles(writer http.ResponseWriter, request *http.Request) { // 获取当前用户 user, ok := request.Context().Value("user").(string) if !ok { http.Error(writer, "Unauthorized", http.StatusUnauthorized) return } // 获取文章列表 var articles []Article err := db.Where("author = ?", user).Find(&articles).Error if err != nil { http.Error(writer, err.Error(), http.StatusBadRequest) return } // 返回文章列表 writer.Header().Set("Content-Type", "application/json") json.NewEncoder(writer).Encode(articles) } // 获取审核列表 func GetAuditList(writer http.ResponseWriter, request *http.Request) { // 获取当前用户 user, ok := request.Context().Value("user").(string) if !ok { http.Error(writer, "Unauthorized", http.StatusUnauthorized) return } // 查询审核列表 var articles []Article err := db.Where("status = ?", "wait").Find(&articles).Error if err != nil { http.Error(writer, err.Error(), http.StatusBadRequest) return } // 返回审核列表 writer.Header().Set("Content-Type", "application/json") json.NewEncoder(writer).Encode(articles) } // 审核通过 func AuditPass(writer http.ResponseWriter, request *http.Request) { id := request.FormValue("id") if id == "" { http.Error(writer, "Invalid params", http.StatusBadRequest) return } // 获取当前用户 user, ok := request.Context().Value("user").(string) if !ok { http.Error(writer, "Unauthorized", http.StatusUnauthorized) return } // 审核文章 status := "pass" err := db.Exec("UPDATE articles SET status = ?, audit_id = ?, audit_time = ? WHERE id = ?", status, user, time.Now().Unix(), id).Error if err != nil { http.Error(writer, err.Error(), http.StatusBadRequest) return } writer.Write([]byte("success")) } // 审核拒绝 func AuditReject(writer http.ResponseWriter, request *http.Request) { id := request.FormValue("id") if id == "" { http.Error(writer, "Invalid params", http.StatusBadRequest) return } // 获取当前用户 user, ok := request.Context().Value("user").(string) if !ok { http.Error(writer, "Unauthorized", http.StatusUnauthorized) return } // 审核文章 status := "reject" err := db.Exec("UPDATE articles SET status = ?, audit_id = ?, audit_time = ? WHERE id = ?", status, user, time.Now().Unix(), id).Error if err != nil { http.Error(writer, err.Error(), http.StatusBadRequest) return } writer.Write([]byte("success")) }
5. Ringkasan
Artikel ini memperkenalkan cara melaksanakan proses semakan berdasarkan semakan artikel melalui bahasa Golang. Semasa melaksanakan proses semakan, kami juga mempelajari reka bentuk penghalaan, pengesahan JWT, pelaksanaan antara muka HTTP, dsb. Semoga artikel ini dapat membantu pembaca yang sedang membangunkan Golang.
Atas ialah kandungan terperinci Golang melaksanakan proses semakan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!