четверг, 27 февраля 2020 г.

Пакеты в Golang: объявление, импорт, загрузка, документирование

Каждая программа Go состоит из пакетов, и каждый пакет имеет путь импорта:

"fmt"
"math/rand"
"github.com/yourbasic/graph"

Пакеты в стандартной библиотеке имеют короткие пути импорта, такие как "fmt" и "math/rand". Сторонние пакеты, такие как "github.com/yourbasic/graph", обычно имеют путь импорта, который включает в себя хостинг (github.com) и название организации (yourbasic).

По соглашению имя пакета совпадает с последним элементом пути импорта:

fmt
rand
yourbasic

Ссылки на определения других пакетов всегда должны иметь префикс с именами их пакетов, и только заглавные имена из других пакетов доступны.

package main

import (
    "fmt"
    "math/rand"

    "github.com/yourbasic/graph"
)

func main() {
    n := rand.Intn(100)
    g := graph.New(n)
    fmt.Println(g)
}

Объявление пакета

Каждый исходный файл Go начинается с объявления пакета, который содержит только имя пакета.

Например, файл src/math/rand/exp.go, являющийся частью реализации пакета math/rand, содержит следующий код.

package rand
  
import "math"
  
const re = 7.69711747013104972
…

Вам не нужно беспокоиться о конфликтах имен пакетов, только путь импорта пакета должен быть уникальным. Как писать код Go показывает, как организовать ваш код и его пакеты в файловой структуре.

Конфликты имен пакетов

Вы можете настроить имя, под которым вы ссылаетесь на импортируемый пакет.

package main

import (
    csprng "crypto/rand"
    prng "math/rand"

    "fmt"
)

func main() {
    n := prng.Int() // псевдослучайное число
    b := make([]byte, 8)
    // криптографически безопасное псевдослучайное число
    csprng.Read(b) 
    fmt.Println(n, b)
}

Точки в импорте

Если точка . появляется вместо имени в операторе импорта, все экспортированные идентификаторы пакета могут быть доступны без квалификатора.

package main

import (
    "fmt"
    . "math"
)

func main() {
    fmt.Println(Sin(Pi/2)*Sin(Pi/2) + Cos(Pi)/2) // 0.5
}

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

Загрузка пакета

Команда go get загружает пакеты, названные путями импорта, вместе с их зависимостями, а затем устанавливает пакеты.

$ go get github.com/go-sql-driver/mysql

Путь импорта соответствует хранилищу кода. Это уменьшает вероятность будущих конфликтов имен.

Пакетная документация

На веб-сайте GoDoc размещена документация для всех общедоступных пакетов Go на Bitbucket, GitHub, Google Project Hosting и Launchpad:

https://godoc.org/fmt
https://godoc.org/math/rand
https://godoc.org/github.com/go-sql-driver/mysql

Команда godoc извлекает и генерирует документацию для всех локально установленных программ Go. Следующая команда запускает веб-сервер, который представляет документацию по адресу http://localhost:6060/.

$ godoc -http=:6060


Читайте также:


Купить gopher

Комментариев нет:

Отправить комментарий