如何使用godoc找到一个包中的所有常量?

sdnqo3pr  于 2023-02-27  发布在  Go
关注(0)|答案(3)|浏览(117)

在过去的几天里,我浪费了太多的时间来搜索像time.Secondhttp.StatusOK这样的常量,因为它们没有分别在go doc timego doc http中提到。
我专门搜索了一个表示持续时间为1秒的常数,方法是:

go doc time | grep Second

没有结果,在阅读整个文档页面之前,得出这个常量不存在的结论。只是在谷歌上搜索了大约15分钟后,我碰巧看到某个地方提到了time.Second,当我直接查找它(go doc time.Second)时,我找到了所有的持续时间常量。
当这些常量甚至没有在包的官方文档中提到时,人们应该如何找到它们呢?我错过了一些明显的东西吗?

oxalkeyp

oxalkeyp1#

go doc time | grep 'const '开始:

$ go doc time | grep 'const '
const ANSIC = "Mon Jan _2 15:04:05 2006" ...
const Nanosecond Duration = 1 ...
    const January Month = 1 + iota ...
    const Sunday Weekday = iota ...
$

go doc time.Nanosecond

$ go doc time.Nanosecond
const (
    Nanosecond  Duration = 1
    Microsecond          = 1000 * Nanosecond
    Millisecond          = 1000 * Microsecond
    Second               = 1000 * Millisecond
    Minute               = 60 * Second
    Hour                 = 60 * Minute
)
    Common durations. There is no definition for units of Day or larger to avoid
    confusion across daylight savings time zone transitions.

    To count the number of units in a Duration, divide:

    second := time.Second
    fmt.Print(int64(second/time.Millisecond)) // prints 1000

    To convert an integer number of units to a Duration, multiply:

    seconds := 10
    fmt.Print(time.Duration(seconds)*time.Second) // prints 10s

$

go doc http | grep 'const '开始:

$ go doc http | grep 'const '
const MethodGet = "GET" ...
const StatusContinue = 100 ...
const DefaultMaxHeaderBytes = 1 << 20
const DefaultMaxIdleConnsPerHost = 2
const TimeFormat = "Mon, 02 Jan 2006 15:04:05 GMT"
const TrailerPrefix = "Trailer:"
    const StateNew ConnState = iota ...
$

go doc http.StatusContinue

$ go doc http.StatusContinue

package http // import "net/http"

const (
    StatusContinue           = 100 // RFC 7231, 6.2.1
    StatusSwitchingProtocols = 101 // RFC 7231, 6.2.2
    StatusProcessing         = 102 // RFC 2518, 10.1

    StatusOK                   = 200 // RFC 7231, 6.3.1
    StatusCreated              = 201 // RFC 7231, 6.3.2
    StatusAccepted             = 202 // RFC 7231, 6.3.3
    StatusNonAuthoritativeInfo = 203 // RFC 7231, 6.3.4
    StatusNoContent            = 204 // RFC 7231, 6.3.5
    StatusResetContent         = 205 // RFC 7231, 6.3.6
    StatusPartialContent       = 206 // RFC 7233, 4.1
    StatusMultiStatus          = 207 // RFC 4918, 11.1
    StatusAlreadyReported      = 208 // RFC 5842, 7.1
    StatusIMUsed               = 226 // RFC 3229, 10.4.1

    StatusMultipleChoices  = 300 // RFC 7231, 6.4.1
    StatusMovedPermanently = 301 // RFC 7231, 6.4.2
    StatusFound            = 302 // RFC 7231, 6.4.3
    StatusSeeOther         = 303 // RFC 7231, 6.4.4
    StatusNotModified      = 304 // RFC 7232, 4.1
    StatusUseProxy         = 305 // RFC 7231, 6.4.5

    StatusTemporaryRedirect = 307 // RFC 7231, 6.4.7
    StatusPermanentRedirect = 308 // RFC 7538, 3

    StatusBadRequest                   = 400 // RFC 7231, 6.5.1
    StatusUnauthorized                 = 401 // RFC 7235, 3.1
    StatusPaymentRequired              = 402 // RFC 7231, 6.5.2
    StatusForbidden                    = 403 // RFC 7231, 6.5.3
    StatusNotFound                     = 404 // RFC 7231, 6.5.4
    StatusMethodNotAllowed             = 405 // RFC 7231, 6.5.5
    StatusNotAcceptable                = 406 // RFC 7231, 6.5.6
    StatusProxyAuthRequired            = 407 // RFC 7235, 3.2
    StatusRequestTimeout               = 408 // RFC 7231, 6.5.7
    StatusConflict                     = 409 // RFC 7231, 6.5.8
    StatusGone                         = 410 // RFC 7231, 6.5.9
    StatusLengthRequired               = 411 // RFC 7231, 6.5.10
    StatusPreconditionFailed           = 412 // RFC 7232, 4.2
    StatusRequestEntityTooLarge        = 413 // RFC 7231, 6.5.11
    StatusRequestURITooLong            = 414 // RFC 7231, 6.5.12
    StatusUnsupportedMediaType         = 415 // RFC 7231, 6.5.13
    StatusRequestedRangeNotSatisfiable = 416 // RFC 7233, 4.4
    StatusExpectationFailed            = 417 // RFC 7231, 6.5.14
    StatusTeapot                       = 418 // RFC 7168, 2.3.3
    StatusMisdirectedRequest           = 421 // RFC 7540, 9.1.2
    StatusUnprocessableEntity          = 422 // RFC 4918, 11.2
    StatusLocked                       = 423 // RFC 4918, 11.3
    StatusFailedDependency             = 424 // RFC 4918, 11.4
    StatusUpgradeRequired              = 426 // RFC 7231, 6.5.15
    StatusPreconditionRequired         = 428 // RFC 6585, 3
    StatusTooManyRequests              = 429 // RFC 6585, 4
    StatusRequestHeaderFieldsTooLarge  = 431 // RFC 6585, 5
    StatusUnavailableForLegalReasons   = 451 // RFC 7725, 3

    StatusInternalServerError           = 500 // RFC 7231, 6.6.1
    StatusNotImplemented                = 501 // RFC 7231, 6.6.2
    StatusBadGateway                    = 502 // RFC 7231, 6.6.3
    StatusServiceUnavailable            = 503 // RFC 7231, 6.6.4
    StatusGatewayTimeout                = 504 // RFC 7231, 6.6.5
    StatusHTTPVersionNotSupported       = 505 // RFC 7231, 6.6.6
    StatusVariantAlsoNegotiates         = 506 // RFC 2295, 8.1
    StatusInsufficientStorage           = 507 // RFC 4918, 11.5
    StatusLoopDetected                  = 508 // RFC 5842, 7.2
    StatusNotExtended                   = 510 // RFC 2774, 7
    StatusNetworkAuthenticationRequired = 511 // RFC 6585, 6
)
    HTTP status codes as registered with IANA. See:
    https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
$
f8rj6qna

f8rj6qna2#

很抱歉,我花了一些时间才意识到。实际上,我们使用了错误的命令行工具。请改用godoc time
如果您没有它,您可以按如下方式安装:

$ go get golang.org/x/tools/cmd/godoc
$ go build golang.org/x/tools/cmd/godoc

然后将其复制到您的路径(或从它所在的位置运行)。

4bbkushb

4bbkushb3#

只需运行带有-all标志的go doc,即可显示包的完整文档,包括其常量:

Flags:
        -all
                Show all the documentation for the package.

来源:go help doc
然后,您可以过滤输出,即使用sed仅包含常量。
下面是http包中的一些常量:

$ go doc -all http | sed -n '/^const (/,/^)/p'
const (
        MethodGet     = "GET"
        MethodHead    = "HEAD"
        MethodPost    = "POST"
        MethodPut     = "PUT"
        MethodPatch   = "PATCH" // RFC 5789
        MethodDelete  = "DELETE"
        MethodConnect = "CONNECT"
        MethodOptions = "OPTIONS"
        MethodTrace   = "TRACE"
)
const (
        StatusContinue           = 100 // RFC 9110, 15.2.1
        StatusSwitchingProtocols = 101 // RFC 9110, 15.2.2
        StatusProcessing         = 102 // RFC 2518, 10.1
        StatusEarlyHints         = 103 // RFC 8297

        StatusOK                   = 200 // RFC 9110, 15.3.1
        StatusCreated              = 201 // RFC 9110, 15.3.2
        StatusAccepted             = 202 // RFC 9110, 15.3.3
...

time封装也是如此:

$ go doc -all time | sed -n '/^const (/,/^)/p'
const (
        Layout      = "01/02 03:04:05PM '06 -0700" // The reference time, in numerical order.
        ANSIC       = "Mon Jan _2 15:04:05 2006"
        UnixDate    = "Mon Jan _2 15:04:05 MST 2006"
        RubyDate    = "Mon Jan 02 15:04:05 -0700 2006"
        RFC822      = "02 Jan 06 15:04 MST"
        RFC822Z     = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone
        RFC850      = "Monday, 02-Jan-06 15:04:05 MST"
        RFC1123     = "Mon, 02 Jan 2006 15:04:05 MST"
        RFC1123Z    = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone
        RFC3339     = "2006-01-02T15:04:05Z07:00"
        RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
        Kitchen     = "3:04PM"
        // Handy time stamps.
        Stamp      = "Jan _2 15:04:05"
        StampMilli = "Jan _2 15:04:05.000"
        StampMicro = "Jan _2 15:04:05.000000"
        StampNano  = "Jan _2 15:04:05.000000000"
        DateTime   = "2006-01-02 15:04:05"
        DateOnly   = "2006-01-02"
        TimeOnly   = "15:04:05"
)
const (
        Nanosecond  Duration = 1
        Microsecond          = 1000 * Nanosecond
        Millisecond          = 1000 * Microsecond
        Second               = 1000 * Millisecond
        Minute               = 60 * Second
        Hour                 = 60 * Minute
)
const (
        January Month = 1 + iota
        February
        March
        April
        May
        June
        July
        August
        September
...

https://pkg.go.dev/上的在线软件包文档也包含“常量”部分。

相关问题