const (
   waitReasonZero                  waitReason = iota // ""
   waitReasonGCAssistMarking                         // "GC assist marking"
   waitReasonIOWait                                  // "IO wait"
   waitReasonChanReceiveNilChan                      // "chan receive (nil chan)"
   waitReasonChanSendNilChan                         // "chan send (nil chan)"
   waitReasonDumpingHeap                             // "dumping heap"
   waitReasonGarbageCollection                       // "garbage collection"
   waitReasonGarbageCollectionScan                   // "garbage collection scan"
   waitReasonPanicWait                               // "panicwait"
   waitReasonSelect                                  // "select"
   waitReasonSelectNoCases                           // "select (no cases)"
   waitReasonGCAssistWait                            // "GC assist wait"
   waitReasonGCSweepWait                             // "GC sweep wait"
   waitReasonGCScavengeWait                          // "GC scavenge wait"
   waitReasonChanReceive                             // "chan receive"
   waitReasonChanSend                                // "chan send"
   waitReasonFinalizerWait                           // "finalizer wait"
   waitReasonForceGCIdle                             // "force gc (idle)"
   waitReasonSemacquire                              // "semacquire"
   waitReasonSleep                                   // "sleep"
   waitReasonSyncCondWait                            // "sync.Cond.Wait"
   waitReasonTimerGoroutineIdle                      // "timer goroutine (idle)"
   waitReasonTraceReaderBlocked                      // "trace reader (blocked)"
   waitReasonWaitForGCCycle                          // "wait for GC cycle"
   waitReasonGCWorkerIdle                            // "GC worker (idle)"
   waitReasonPreempted                               // "preempted"
   waitReasonDebugCall                               // "debug call"
)

var waitReasonStrings = [...]string{
   waitReasonZero:                  "",
   waitReasonGCAssistMarking:       "GC assist marking",
   waitReasonIOWait:                "IO wait",
   waitReasonChanReceiveNilChan:    "chan receive (nil chan)",
   waitReasonChanSendNilChan:       "chan send (nil chan)",
   waitReasonDumpingHeap:           "dumping heap",
   waitReasonGarbageCollection:     "garbage collection",
   waitReasonGarbageCollectionScan: "garbage collection scan",
   waitReasonPanicWait:             "panicwait",
   waitReasonSelect:                "select",
   waitReasonSelectNoCases:         "select (no cases)",
   waitReasonGCAssistWait:          "GC assist wait",
   waitReasonGCSweepWait:           "GC sweep wait",
   waitReasonGCScavengeWait:        "GC scavenge wait",
   waitReasonChanReceive:           "chan receive",
   waitReasonChanSend:              "chan send",
   waitReasonFinalizerWait:         "finalizer wait",
   waitReasonForceGCIdle:           "force gc (idle)",
   waitReasonSemacquire:            "semacquire",
   waitReasonSleep:                 "sleep",
   waitReasonSyncCondWait:          "sync.Cond.Wait",
   waitReasonTimerGoroutineIdle:    "timer goroutine (idle)",
   waitReasonTraceReaderBlocked:    "trace reader (blocked)",
   waitReasonWaitForGCCycle:        "wait for GC cycle",
   waitReasonGCWorkerIdle:          "GC worker (idle)",
   waitReasonPreempted:             "preempted",
   waitReasonDebugCall:             "debug call",
}

func (w waitReason) String() string {
   if w < 0 || w >= waitReason(len(waitReasonStrings)) {
      return "unknown wait reason"
   }
   return waitReasonStrings[w]
}

摘自:/usr/local/Cellar/go/1.17.2/libexec/src/runtime/runtime2.go