如何使用go doc找到包中的所有常量?

时间:2018-03-28 23:29:20

标签: go

在过去的几天里,我浪费了太多时间来搜索time.Secondhttp.StatusOK等常量,因为go doc time或{{{{}}中没有提及它们1}}分别。

我通过执行以下操作专门搜索了表示持续时间为1秒的常量:

go doc http

没有结果,在阅读整个文档页面之后才得出结论,该常量不存在。只是在Google搜索了大约15分钟之后,我才碰巧看到go doc time | grep Second 在某个地方提到了,当我直接查找它(time.Second)时,我发现了所有的持续时间常数。

当人们在包装的官方文档中甚至没有提到这些常数时,人们应该如何发现这些常数?我错过了一些明显的东西吗?

2 个答案:

答案 0 :(得分:2)

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
$ 

答案 1 :(得分:1)

抱歉,花了我一些时间才意识到这一点。实际上,我们正在查看错误的命令行工具。请改用godoc time

如果您没有,可以按如下方式安装:

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

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