 Documentation
      ¶
      Documentation
      ¶
    
    
  
    
  
    Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
      View Source
      
  
var DebugGoroutines = os.Getenv("DEBUG_GOROUTINES") == "1"
    Functions ¶
func ID ¶
func ID() uint64
ID returns goroutine id of the goroutine that calls it. It calls runtime.Stack with a large enough buffer to capture the entire trace.
Example ¶
package main
import (
	"fmt"
	"github.com/searKing/golang/go/runtime/goroutine"
)
func main() {
	fmt.Printf("%d\n", goroutine.ID())
}
Output: 1
Types ¶
type Lock ¶
type Lock uint64
Lock represents a goroutine ID, with goroutine ID checked, that is whether GoRoutines of lock newer and check caller differ. disable when DebugGoroutines equals false
func NewLock ¶
func NewLock() Lock
NewLock returns a goroutine Lock, that checks whether goroutine of lock newer and check caller differ. Code borrowed from https://github.com/golang/go/blob/master/src/net/http/h2_bundle.go
Example ¶
package main
import (
	"fmt"
	"sync"
	"github.com/searKing/golang/go/runtime/goroutine"
)
func main() {
	oldDebug := goroutine.DebugGoroutines
	goroutine.DebugGoroutines = true
	defer func() { goroutine.DebugGoroutines = oldDebug }()
	g := goroutine.NewLock()
	g.MustCheck()
	var wg sync.WaitGroup
	wg.Add(1)
	go func() {
		defer wg.Done()
		defer func() {
			if r := recover(); r != nil {
				fmt.Printf("panic recovered: %v\n", r)
			}
		}()
		g.MustCheck() // should panic
	}()
	wg.Wait()
}
Output: panic recovered: running on the wrong goroutine
func (Lock) CheckNotOn ¶
Check whether caller's goroutine escape lock
func (Lock) MustCheckNotOn ¶
func (g Lock) MustCheckNotOn()
 Click to show internal directories. 
   Click to hide internal directories.