github.com/AndrienkoAleksandr/go@v0.0.19/src/intern/godebugs/table.go (about) 1 // Copyright 2023 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // Package godebugs provides a table of known GODEBUG settings, 6 // for use by a variety of other packages, including internal/godebug, 7 // runtime, runtime/metrics, and cmd/go/internal/load. 8 package godebugs 9 10 // An Info describes a single known GODEBUG setting. 11 type Info struct { 12 Name string // name of the setting ("panicnil") 13 Package string // package that uses the setting ("runtime") 14 Changed int // minor version when default changed, if any; 21 means Go 1.21 15 Old string // value that restores behavior prior to Changed 16 Opaque bool // setting does not export information to runtime/metrics using [internal/godebug.Setting.IncNonDefault] 17 } 18 19 // All is the table of known settings, sorted by Name. 20 // 21 // Note: After adding entries to this table, run 'go generate runtime/metrics' 22 // to update the runtime/metrics doc comment. 23 // (Otherwise the runtime/metrics test will fail.) 24 // 25 // Note: After adding entries to this table, update the list in doc/godebug.md as well. 26 // (Otherwise the test in this package will fail.) 27 var All = []Info{ 28 {Name: "execerrdot", Package: "os/exec"}, 29 {Name: "gocachehash", Package: "cmd/go"}, 30 {Name: "gocachetest", Package: "cmd/go"}, 31 {Name: "gocacheverify", Package: "cmd/go"}, 32 {Name: "http2client", Package: "net/http"}, 33 {Name: "http2debug", Package: "net/http", Opaque: true}, 34 {Name: "http2server", Package: "net/http"}, 35 {Name: "installgoroot", Package: "go/build"}, 36 {Name: "jstmpllitinterp", Package: "html/template"}, 37 //{Name: "multipartfiles", Package: "mime/multipart"}, 38 {Name: "multipartmaxheaders", Package: "mime/multipart"}, 39 {Name: "multipartmaxparts", Package: "mime/multipart"}, 40 {Name: "netdns", Package: "net", Opaque: true}, 41 {Name: "panicnil", Package: "runtime", Changed: 21, Old: "1"}, 42 {Name: "randautoseed", Package: "math/rand"}, 43 {Name: "tarinsecurepath", Package: "archive/tar"}, 44 {Name: "x509sha1", Package: "crypto/x509"}, 45 {Name: "x509usefallbackroots", Package: "crypto/x509"}, 46 {Name: "zipinsecurepath", Package: "archive/zip"}, 47 } 48 49 // Lookup returns the Info with the given name. 50 func Lookup(name string) *Info { 51 // binary search, avoiding import of sort. 52 lo := 0 53 hi := len(All) 54 for lo < hi { 55 m := lo + (hi-lo)>>1 56 mid := All[m].Name 57 if name == mid { 58 return &All[m] 59 } 60 if name < mid { 61 hi = m 62 } else { 63 lo = m + 1 64 } 65 } 66 return nil 67 }