Как читать пакетную документацию - PullRequest
0 голосов
/ 02 марта 2020

Я пытаюсь понять, как использовать / вызывать библиотеки и функции Golang, прочитав официальную документацию , но не могу полностью понять.

Ниже приведены некоторые примеры, которые я надеюсь получить от экспертов здесь в SO

Пример 1: время

Из документации:

type Time
  func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time
  func Now() Time

Я интерпретирую вышеизложенное как тип Time имеет метод Now, который не принимает никаких входных данных и возвращает тип Time.

, таким образом,

var t time.Time
fmt.Println(t)

дает 0001-01-01 00:00:00 +0000 UTC Итак. t является допустимой переменной типа time.Time.

Вопрос 1:
Но почему t.Now() выдает ошибку t.Now undefined (type time.Time has no field or method Now)?

Вопрос 2:
Интересно , time.Now() возвращает желаемое значение. Означает ли это, что Now() не является методом type Time?

Ответы [ 2 ]

1 голос
/ 02 марта 2020

var t time.Time объявляет переменную типа time.Time с нулевым значением для типа.

func Now() Time: Now() - это функция без параметров, которая возвращает тип time.Time

func (t Time) Month() Month: Month() - это метод на приемнике t type time.Time без параметров, который возвращает тип time.Month.

Например,

package main

import (
    "fmt"
    "time"
)

func main() {
    var t time.Time
    fmt.Println(t)
    t = time.Now()
    fmt.Println(t)
    m := t.Month()
    fmt.Println(m)
}

Детская площадка: https://play.golang.org/p/Ume5kxDAe05

Выход:

0001-01-01 00:00:00 +0000 UTC
2009-11-10 23:00:00 +0000 UTC m=+0.000000001
November

Примечание: на детской площадке время начинается в 2009-11-10 23:00:00 UT C. Это облегчает кеширование программ, давая им детерминированный c вывод.

Взять Тур по Go.

См. Go Спецификация языка программирования

0 голосов
/ 02 марта 2020

Я думаю что вы действительно спрашиваете здесь: почему документация к пакету изложена так, как она есть? То есть, для этого конкретного c случая, в этой конкретной документации пакета c мы видим:

type Time
  func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time
  func Now() Time

, где строка type Time появляется сама по себе, затем сразу под ним появляются несколько объявлений func, которые возвращают значение типа Time.

Причина, по которой эти два символа имеют отступ, состоит в том, чтобы указать, что эти функции возвращают значение типа Time. Причина, по которой они появляются под строкой type Time, заключается в том, что эти функции возвращают значение типа Time.

. В этом случае обе причины сводятся к одному и тому же - они избыточны. Это нормально, хотя! Это просто функция того факта, что генератор документации Go - это программа, которая подчиняется этим правилам сортировки и отступам. Ничто здесь не подразумевает, что эти две функции являются функциями приемника.

Рассмотрим другой пример из той же документации пакета. Несколько раньше мы видим:

type Duration
    func ParseDuration(s string) (Duration, error)
    func Since(t Time) Duration
    func Until(t Time) Duration

Здесь это говорит нам о том, что все три из этих функций возвращают Duration, хотя первая возвращает оба Duration и и error. Функция ParseDuration - это обычная функция. Именно функции Since и Until являются функциями-получателями . 1 Они принимают аргумент получателя типа Time (и никаких других аргументов) и возвращают значение type Duration.

В некоторых других конструкциях может иметь смысл отсортировать функции Since и Until под именем типа Time, поскольку это функции-получатели типа Time. Но документация пакета сортирует (и группы) по типу return , а не по типу получателя или аргумента. Вот и все, что здесь есть на самом деле.


1 Вы можете - и spe c делает - вызывать эти методы если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...