This article brings you an introduction to the context value transfer of context (code example). It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.
This article will start with a systematic discussion on the usage of context. Here you will be able to use context reasonably to solve some difficult problems at work.
Context can also be used to save data in addition to timeout processing. When you need to pass data when passing multiple contexts, then the knowledge mentioned in this article can come in handy.
Sample code
The sample code is a simple http service. The process is that after logging in, the homepage will jump. The homepage is authenticated through the guard middleware. Of course, the sample code does not do other processing such as connecting to the database, which is not the focus of this article.
After the guard function reads the cookie, it writes the cookie value into the context and passes it down. It can be said to be "transparent" in the entire request. When accessing the interface that needs to be protected, it is detected that no cookie is provided, and the terminal request is made directly. Otherwise, the username value is stored in the cookie through r.WithContext to avoid the disadvantages of the business interface directly reading the cookie. Because if the authentication algorithm is changed later, the business code does not need to be changed, just change the middleware directly.
package main import ( "context" "fmt" "log" "net/http" "time" ) func main() { mux := http.NewServeMux() mux.HandleFunc("/", guard(home)) mux.HandleFunc("/login", login) log.Fatal(http.ListenAndServe(":8080", mux)) } // 登录 func login(w http.ResponseWriter, r *http.Request) { if r.URL.Query().Get("username") != "root" { http.Error(w, http.StatusText(401), 401) return } cookie := &http.Cookie{Name: "username", Value: "root", Expires: time.Now().Add(time.Hour)} http.SetCookie(w, cookie) http.Redirect(w, r, "/", 302) } func home(w http.ResponseWriter, r *http.Request) { username := r.Context().Value("username") fmt.Fprintf(w, "welcome login: %s", username.(string)) } // 守卫 func guard(handleFunc http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // check username log.Printf("%s - %s\n", r.Method, r.RequestURI) cookie, err := r.Cookie("username") if err != nil || cookie == nil { // 如果username为空直接拦截 http.Error(w, http.StatusText(401), 401) return } handleFunc(w, r.WithContext(context.WithValue(r.Context(), "username", cookie.Value))) } }
This article only has so much code and very little content. I hope everyone can make good use of this tool.
The above is the detailed content of Introduction to context value passing of context (code example). For more information, please follow other related articles on the PHP Chinese website!

The article discusses using Maven and Gradle for Java project management, build automation, and dependency resolution, comparing their approaches and optimization strategies.

The article discusses creating and using custom Java libraries (JAR files) with proper versioning and dependency management, using tools like Maven and Gradle.

The article discusses implementing multi-level caching in Java using Caffeine and Guava Cache to enhance application performance. It covers setup, integration, and performance benefits, along with configuration and eviction policy management best pra

The article discusses using JPA for object-relational mapping with advanced features like caching and lazy loading. It covers setup, entity mapping, and best practices for optimizing performance while highlighting potential pitfalls.[159 characters]

Java's classloading involves loading, linking, and initializing classes using a hierarchical system with Bootstrap, Extension, and Application classloaders. The parent delegation model ensures core classes are loaded first, affecting custom class loa


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

WebStorm Mac version
Useful JavaScript development tools

Zend Studio 13.0.1
Powerful PHP integrated development environment

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

Atom editor mac version download
The most popular open source editor

Dreamweaver CS6
Visual web development tools