mirror of
				https://github.com/go-micro/go-micro.git
				synced 2025-10-30 23:27:41 +02:00 
			
		
		
		
	The original signature accept a boolean, and it feel like a little verbose, since when people pass in this option, he/she always want to pass a `true`. Now if input `wg` is nil, it has same effect as passing `true` in original code. Furthermore, if user want's finer grained control during shutdown, one can pass in a predefined `wg`, so that server will wait against it during shutdown.
		
			
				
	
	
		
			29 lines
		
	
	
		
			469 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			29 lines
		
	
	
		
			469 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package server
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"sync"
 | |
| )
 | |
| 
 | |
| type serverKey struct{}
 | |
| 
 | |
| func wait(ctx context.Context) *sync.WaitGroup {
 | |
| 	if ctx == nil {
 | |
| 		return nil
 | |
| 	}
 | |
| 	wg, ok := ctx.Value("wait").(*sync.WaitGroup)
 | |
| 	if !ok {
 | |
| 		return nil
 | |
| 	}
 | |
| 	return wg
 | |
| }
 | |
| 
 | |
| func FromContext(ctx context.Context) (Server, bool) {
 | |
| 	c, ok := ctx.Value(serverKey{}).(Server)
 | |
| 	return c, ok
 | |
| }
 | |
| 
 | |
| func NewContext(ctx context.Context, s Server) context.Context {
 | |
| 	return context.WithValue(ctx, serverKey{}, s)
 | |
| }
 |