Модуль Math — Примеры математических программ в Python
Библиотека Math в Python обеспечивает доступ к некоторым популярным математическим функциям и константам, которые можно использовать в коде для более сложных математических вычислений. Библиотека является встроенным модулем Python, поэтому никакой дополнительной установки через pip делать не нужно. В данной статье будут даны примеры часто используемых функций и констант библиотеки Math в Python.
Содержание статьи
- Специальные константы библиотеки math
- Число Пи из библиотеки math
- Число Эйлера из библиотеки math
- Экспонента и логарифм библиотеки math
- Функция экспоненты exp() в Python
- Функция логарифма log() в Python
- Функция log10() в Python
- Функция log2() в Python
- Функция log(x, y) в Python
- Функция log1p(x) в Python
- Арифметические функции в Python
- Тригонометрические функции в Python
- Конвертация типов числа в Python
Специальные константы библиотеки math
В библиотеке Math в Python есть две важные математические константы.
Число Пи из библиотеки math
Первой важной математической константой является число Пи (π). Оно обозначает отношение длины окружности к диаметру, его значение 3,141592653589793. Чтобы получить к нему доступ, сначала импортируем библиотеку math следующим образом:
Python
import math
import math |
Затем можно получить доступ к константе, вызывая pi
:
Python
math.pi
math.pi |
Вывод
3.141592653589793
3.141592653589793 |
Данную константу можно использовать для вычисления площади или длины окружности. Далее представлен пример простого кода, с помощью которого это можно сделать:
Python
import math
radius = 2
print(‘Площадь окружности с радиусом 2 равна:’, math.
import math
radius = 2 print(‘Площадь окружности с радиусом 2 равна:’, math.pi * (radius ** 2)) |
Вывод
Площадь окружности с радиусом 2 равна: 12.566370614359172
Площадь окружности с радиусом 2 равна: 12.566370614359172 |
Мы возвели радиус во вторую степень и умножили значение на число Пи, как и следовало сделать в соответствии с формулой πr2.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Python Форум Помощи
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Подписаться
Число Эйлера из библиотеки math
Число Эйлера (е) является основанием натурального логарифма. Оно также является частью библиотеки Math в Python. Получить доступ к числу можно следующим образом:
Python
math.e
math.e |
Вывод
2.718281828459045
2.718281828459045 |
В следующем примере представлено, как можно использовать вышеуказанную константу:
Python
import math print((math.e + 6 / 2) * 4.32)
import math
print((math.e + 6 / 2) * 4.32) |
Вывод
24.702977498943074
24.702977498943074 |
Экспонента и логарифм библиотеки math
В данном разделе рассмотрим функции библиотеки Math в Python, которые используются для нахождения экспоненты и логарифмов.
Функция экспоненты exp() в Python
Библиотека Math в Python поставляется с функцией exp()
, которую можно использовать для вычисления значения е
. К примеру,
ex
— экспонента от х
. Значение е
равно 2.718281828459045
.
Метод может быть использован со следующим синтаксисом:
Python
math.exp(x)
math.exp(x) |
Параметр x
может быть положительным или отрицательным числом. Если x
не число, метод возвращает ошибку. Рассмотрим пример использования данного метода:
Python
import math # Инициализация значений an_int = 6 a_neg_int = -8 a_float = 2.00 # Передача значений методу exp() и вывод print(math.exp(an_int)) print(math.exp(a_neg_int)) print(math.exp(a_float))
1 2 3 4 5 6 7 8 9 10 11 | import math
# Инициализация значений an_int = 6 a_neg_int = -8 a_float = 2.
# Передача значений методу exp() и вывод print(math.exp(an_int)) print(math.exp(a_neg_int)) print(math.exp(a_float)) |
Вывод
403.4287934927351 0.00033546262790251185 7.38905609893065
403.4287934927351 0.00033546262790251185 7.38905609893065 |
Мы объявили три переменные и присвоили им значения с различными числовыми типами данных. Мы передали значения методу
для вычисления их экспоненты.
Мы также можем применить данный метод для встроенных констант, что продемонстрировано ниже:
Python
import math print(math.exp(math.e)) print(math.exp(math.pi))
import math
print(math.exp(math.e)) print(math.exp(math.pi)) |
Вывод
15.154262241479262 23.140692632779267
15. 23.140692632779267 |
При передаче не числового значения методу будет сгенерирована ошибка TypeError, как показано далее:
Python
import math print(math.exp(«20»))
import math
print(math.exp(«20»)) |
Вывод
Traceback (most recent call last): File «C:/Users/admin/mathe.py», line 3, in <module> print (math.exp(«20»)) TypeError: a float is required
Traceback (most recent call last): File «C:/Users/admin/mathe.py», line 3, in <module> print (math.exp(«20»)) TypeError: a float is required |
Как видно из примера выше, генерируется ошибка TypeError
.
Функция логарифма log() в Python
Функция log()
возвращает логарифм определенного числа. Натуральный логарифм вычисляется относительно основания е
. В следующем примере показано использование функции логарифма:
Python
import math print(«math.log(10.43):», math.log(10.43)) print(«math.log(20):», math.log(20)) print(«math.log(math.pi):», math.log(math.pi))
import math
print(«math.log(10.43):», math.log(10.43)) print(«math.log(20):», math.log(20)) print(«math.log(math.pi):», math.log(math.pi)) |
В скрипте выше методу передаются числовые значения с различными типами данных. Также рассчитывается натуральный логарифм константы pi
. Вывод следующий:
math.log(10.43): 2.344686269012681 math.log(20): 2.995732273553991 math.log(math.pi): 1.1447298858494002
math.log(10.43): 2.344686269012681 math.log(20): 2.995732273553991 math.log(math.pi): 1.1447298858494002 |
Функция log10() в Python
Метод log10()
возвращает логарифм по основанию 10 определенного числа. К примеру:
import math # Возвращает log10 числа 50 print(«log10 числа 50 равен:», math.log10(50))
import math
# Возвращает log10 числа 50 print(«log10 числа 50 равен:», math.log10(50)) |
Вывод
log10 числа 50 равен: 1.6989700043360187
log10 числа 50 равен: 1.6989700043360187 |
Функция log2() в Python
Функция log2()
возвращает логарифм определенного числа по основанию 2. К примеру:
Python
import math # Возвращает log2 числа 16 print(«log2 числа 16 равен:», math.log2(16))
import math
# Возвращает log2 числа 16 print(«log2 числа 16 равен:», math.log2(16)) |
Вывод
log2 числа 16 равен: 4.0
log2 числа 16 равен: 4. |
Функция log(x, y) в Python
Функция log(x, y)
возвращает логарифм числа х
по основанию y
. К примеру:
Python
import math # Возвращает логарифм 3,4 print(«Логарифм 3 по основанию 4 равен:», math.log(3, 4))
import math
# Возвращает логарифм 3,4 print(«Логарифм 3 по основанию 4 равен:», math.log(3, 4)) |
Вывод
Логарифм 3 по основанию 4 равен: 0.6309297535714574
Логарифм 3 по основанию 4 равен: 0.6309297535714574 |
Функция log1p(x) в Python
Функция log1p(x)
рассчитывает логарифм(1+x), как представлено ниже:
Python
import math print(«Значение логарифма(1+x) от 10 равно:», math.log1p(10))
import math
print(«Значение логарифма(1+x) от 10 равно:», math. |
К числу других математических функций относятся:
pow()
: принимает два вещественных аргумента, возводит первый аргумент в степень, значением которой является второй аргумент, после чего возвращает результат. К примеру,pow(2, 2)
эквивалентно выражению2 ** 2
;sqrt()
: возвращает квадратный корень определенного числа.
Примеры данных методов представлены ниже:
Возведение в степень
Python
math.pow(3, 4)
math.pow(3, 4) |
Вывод
Python
math.sqrt(81)
math.sqrt(81) |
Вывод
Тригонометрические функции в Python
Модуль math в Python поддерживает все тригонометрические функции. Самые популярные представлены ниже:
sin(a)
: Возвращает синус"а"
в радианах;cos(a)
: Возвращает косинус"а"
в радианах;tan(a)
: Возвращает тангенс"а"
в радианах;asin(a)
: Возвращает инвертированный синус. Аналогичным образом работают"atan"
и"acos"
;degrees(a)
: Конвертирует угол"a"
из радиан в градусы;radians(a)
: Конвертирует угол"a"
из градусов в радианы.
Рассмотрим следующий пример:
Python
import math angle_In_Degrees = 62 angle_In_Radians = math.radians(angle_In_Degrees) print(‘Значение угла:’, angle_In_Radians) print(‘sin(x) равен:’, math.sin(angle_In_Radians)) print(‘tan(x) равен:’, math.tan(angle_In_Radians)) print(‘cos(x) равен:’, math.cos(angle_In_Radians))
1 2 3 4 5 6 7 8 9 | import math
angle_In_Degrees = 62 angle_In_Radians = math.
print(‘Значение угла:’, angle_In_Radians) print(‘sin(x) равен:’, math.sin(angle_In_Radians)) print(‘tan(x) равен:’, math.tan(angle_In_Radians)) print(‘cos(x) равен:’, math.cos(angle_In_Radians)) |
Вывод
Значение угла: 1.0821041362364843 sin(x) равен: 0.8829475928589269 tan(x) равен: 1.8807264653463318 cos(x) равен: 0.46947156278589086
Значение угла: 1.0821041362364843 sin(x) равен: 0.8829475928589269 tan(x) равен: 1.8807264653463318 cos(x) равен: 0.46947156278589086 |
Обратите внимание, что вначале мы конвертировали значение угла из градусов в радианы для осуществления дальнейших операций.
Конвертация типов числа в Python
Python может конвертировать начальный тип числа в другой указанный тип. Данный процесс называется «преобразованием». Python может внутренне конвертировать число одного типа в другой, когда в выражении присутствуют смешанные значения. Такой случай продемонстрирован в следующем примере:
Python
3 + 5.1
3 + 5.1 |
Вывод
В вышеприведенном примере целое число 3 было преобразовано в вещественное число 3.0 с плавающей точкой. Результатом сложения также является число с плавающей точкой (или запятой).
Однако иногда вам необходимо явно привести число из одного типа в другой, чтобы удовлетворить требования параметра функции или оператора. Это можно сделать с помощью различных встроенных функций Python.
Например, чтобы преобразовать целое число в число с плавающей точкой, мы должны вызвать функцию float()
, как показано ниже:
Python
a = 12 b = float(a) print(b)
a = 12 b = float(a) print(b) |
Вывод
Целое число типа integer
было преобразовано в вещественное число типа float
.
float
также можно конвертировать в integer
следующим образом:
Python
a = 12.65 b = int(a) print(b)
a = 12.65 b = int(a) print(b) |
Вывод
Вещественное число было преобразовано в целое через удаление дробной части и сохранение базового числа. Обратите внимание, что при конвертации значения в int
подобным образом число будет усекаться, а не округляться вверх.
Заключение
Библиотека Math предоставляет функции и константы, которые можно использовать для выполнения арифметических и тригонометрических операций в Python. Библиотека изначально встроена в Python, поэтому дополнительную установку перед использованием делать не требуется. Для получения дополнительной информации можете просмотреть официальную документацию.
Vasile Buldumac
Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.
E-mail: [email protected]
Образование
Universitatea Tehnică a Moldovei (utm.md)
- 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»
Примеры расчетов пользователей
Новости
Публикации
Вебинары
Вебинар: Способы соединения конечных элементов и узлов в ЛИРА 10
Приглашаем на вебинар по применению инструментов соединения элементов и узлов в ЛИРА 10. Будут рассмотрены примеры из инженерной практики: моделирование шарниров, учет несоосности, передача усилий между различными типами КЭ, автоматическое соединение элементов
03 октября 2022
Базовый курс ЛИРА 10 во Владивостоке 17-21 октября
Приглашаем на первый курс ЛИРА 10 на Дальнем Востоке
05 сентября 2022
Запись докладов по сейсмостойкому строительству
Делимся материалами с III Международной научнопрактической конференции по сейсмостойкому строительству в г. Бишкек
10 августа 2022
Список Eurocodes, реализованных в ЛИРА 10
В версии 10.12 мы существенно расширили функционал по Eurocodes. Предлагаем ознакомиться с описанием выполняемых конструктивных расчетов, а также скачать полный перечень реализованных положений
02 августа 2022
Все новости
Реализация модели контактного слоя при расчете адгезионного соединения с использованием метода конечных элементов
В большинстве опытов по испытанию адгезионных соединений измеряется средняя адгезионная прочность. Данная величина вычисляется как отношение разрушающей нагрузки к площади склейки. Подобный подход подразумевает равномерное распределение касательных напряжений. Исследователи давно обнаружили, что средняя адгезионная прочность соединения является сильной функцией геометрических [1] и физико-механических параметров модели и, следовательно, делает малоинформативными и несопоставимыми экспериментальные данные, выполненные на отличающихся образцах. Малочисленные результаты по измерению касательных напряжений по площади склейки с использованием преимущественно поляризационно-оптических методов [2] показывают, что распределение напряжений является нелинейной функцией. При этом наблюдается концентрация напряжений у торцов модели. В связи с этими фактами возникает необходимость детального изучения напряженно-деформированного состояния адгезионных соединений.
06 июня 2019
Оценка точности нелинейного статического метода анализа сейсмостойкости сооружений
В статье рассмотрено практическое применение методики нелинейного статического анализа сейсмостойкости зданий и сооружений. Произведен расчет одноэтажной стальной рамы нелинейным статическим и нелинейным динамическим методами. В результате анализа полученных результатов расчета показана значимость высших форм колебаний и необходимость анализа их влияния на реакцию системы.
06 февраля 2018
Напряженно-деформированное состояние коррозионно — поврежденных железобетонных элементов при динамическом нагружении
С помощью современного программно-вычислительного комплекса ЛИРА 10.6 выполнена сравнительная оценка напряженно–деформированного состояния не поврежденного и коррозионно-поврежденного железобетонного элемента при динамическом и статическом нагружении. Проанализировано влияния ослабленного коррозией бетонного участка сжатой зоны на перераспределение напряжений в сечении.
25 января 2018
Применение технологий BIM при расчете зданий в условиях сложной геотехнической обстановки в связке программ Revit, ЛИРА 10. 6 и PLAXIS 3D
В статье рассматривается методика совместной работы ПК ЛИРА 10.6 и PLAXIS 3D посредством API модуля. С позиции инженера-расчетчика рассматриваются возможности передачи моделей между различными программами с применением технологий информационного моделирования.
21 июня 2017
Все публикации
Способы соединения конечных элементов и узлов в ЛИРА 10
Приглашаем на вебинар по применению инструментов соединения элементов и узлов в ЛИРА 10. Будут рассмотрены примеры из инженерной практики: моделирование шарниров, учет несоосности, передача усилий между различными типами КЭ, автоматическое соединение элементов
30 сентября 2022
Нововведения связки Autodesk Revit – ЛИРА 10.12
В версии 10.12 связка стала еще удобнее для работы проектировщиков
20 мая 2022
Расчет стальных конструкций на сейсмические воздействия
Рассмотрим особенности расчета и теоретические аспекты, объясняющие те или иные пункты в нормах проектирования.
20 мая 2022
Расчёт деревянных конструкций в ЛИРА 10
Автоматический расчёт и точные результаты
26 ноября 2021
Все записи вебинаров
Модули и пакеты. Урок 12 курса «ООП на Python»
Что такое модули, как их импортировать в программу, а также как создавать собственные модули, было описано в одном из уроков курса «Python. Введение в программирование». Там модули рассматривались с точки зрения обособления функций, которые потом можно было бы импортировать в разные программы. На самом деле модули содержат не столько функции, сколько классы с их методами.
В этом уроке шагнем дальше и рассмотрим, как несколько модулей-файлов могут быть объединены в пакет. Также выясним, что модули могут исполняться как самостоятельные программы.
Пакеты модулей
В программировании связанные модули принято объединять в пакеты. Пакет представляет собой каталог с файлами-модулями. Кроме того, внутри пакета могут быть вложенные каталоги, а уже в них – файлы.
Допустим, мы пишем пакет модулей для вычисления площадей и периметров фигур. Пакет будет состоять из двух модулей. В одном будут описаны классы двумерных фигур, в другом – трехмерных.
Каталог-пакет назовем geometry. Один модуль – planimetry.py, другой – stereometry.py. Пакет следует разместить в одном из каталогов, содержащихся в списке sys.path. Первым его элементом является домашний каталог, обозначаемый как пустая строка. Таким образом, пакет проще разместить в том же каталоге, где будет основной скрипт.
Если не планируется писать скрипт, а достаточно протестировать пакет в интерактивном режиме, то в Linux будет проще разместить его в домашнем каталоге.
Содержимое файла planimetry.py:
from math import pi, pow class Rectangle: def __init__(self, a, b): self.w = a self.h = b def square(self): return round(self.w * self.h, 2) def perimeter(self): return 2 * (self.w + self.h) class Circle: def __init__(self, radius): self.r = radius def square(self): return round(pi * pow(self.r, 2), 2) def length(self): return round(2 * pi * self.r)
Код файла stereometry.py:
from math import pi, pow class Cuboid: def __init__(self, a, b, c): self.length = a self.width = b self.height = c self.__sq_sur = 2 * (a * b + a * c + b * c) self.__volume = a * b * c def S(self): return round(self.__sq_sur, 2) def V(self): return round(self.__volume, 2) class Ball: def __init__(self, radius): self.r = radius def S(self): s = 4 * pi * pow(self.r, 2) return round(s, 2) def V(self): v = (4 / 3) * pi * pow(self.r, 3) return round(v, 2)
Также в каталоге пакета должен быть файл __init__.py, даже если этот файл будет пустым. Его наличие позволяет интерпретатору понять, что перед ним пакет, а не просто каталог. Файл __init__.py может быть не пустым, а содержать переменную, в которой перечислены модули, которые будут импортироваться командой
from
имя_пакета
import *
, а также какой-либо инициирующий код, например, подключение к базе данных.
Теперь попробуем импортировать модули пакета:
>>> import geometry.planimetry as pl >>> import geometry.stereometry as st >>> a = pl.Rectangle(3, 4) >>> b = st.Ball(5) >>> a.square() 12 >>> b.V() 523.6
Если сделать импорт только пакета, то мы не сможем обращаться к модулям:
pl@pl-desk:~$ python3 Python 3.5.2 (default, Nov 23 2017, 16:37:01) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import geometry >>> b = geometry.stereometry.Ball(5) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: module 'geometry' has no attribute 'stereometry'
Тогда возникает вопрос: в чем выгода пакетов, если все равно приходится импортировать модули индивидуально? Основной смысл заключается в структурировании пространств имен. Представьте, что есть разные пакеты, содержащие одноименные модули и классы. В таком случае точечная нотация через имя пакета, подпакета, модуля дает возможность пользоваться в программе одноименными сущностями из разных пакетов. Например, a.samename и b.samename. Кроме того точечная нотация дает своего рода описание объекту. Например, выражения geometry.planimetry.House() или geometry.stereometry.House() говорят, что в первом случае будет создан двумерный объект-дом, во-втором – трехмерный. Это куда информативней, чем просто House().
Однако в файле __init__.py в переменной __all__ можно перечислить, какие модули будут импортироваться через from
имя_пакета
import *
:
__all__ = ['planimetry', 'stereometry']
После этого можно делать так:
>>> from geometry import * >>> b = stereometry.Ball(5) >>> a = planimetry.Circle(5)
Выполнение модуля как скрипта
В Python обычный файл-скрипт, или файл-программа, не отличается от файла-модуля почти ничем. Нет команд языка, которые бы «говорили», что вот это – модуль, а это – скрипт. Отличие заключается лишь в том, что обычно модули не содержат команды вызова функций и создания экземпляров в основной ветке. В модуле обычно происходит только определение классов и функций.
Однако возможности языка позволяют в модули помещать код, который будет выполняться, когда файл не импортируется, а сам передается интерпретатору как самостоятельная программа. Выглядит это примерно так:
class A: def __str__(self): return "A" if __name__ == "__main__": print(A())
То, что находится в теле if, выполнится только в случае исполнения файла как скрипта. Но не при импорте.
pl@pl-desk:~$ python3 test.py A
Встроенный атрибут __name__, представляющий собой переменную, есть у каждого файла. При импорте этой переменной присваивается имя модуля:
>>> import math >>> math.__name__ 'math' >>> planimetry.__name__ 'geometry.planimetry'
Однако когда файл исполняется как скрипт, значение __name__ становится равным строке «__main__». Это можно увидеть, если в код поместить print(__name__) и выполнить файл как скрипт.
Таким образом, если __name__ равен «__main__», то выполняется код, вложенный в тело условного оператора. Обычно сюда помещают код для тестирования модуля в процессе разработки, а в готовый модуль – примеры, как пользоваться определенными здесь сущностями.
Практическая работа
В практической работе урока 7 «Композиция» требовалось разработать интерфейс взаимодействия с пользователем. Разнесите сам класс и интерфейс по разным файлам. Какой из них выполняет роль модуля, а какой – скрипта? Оба файла можно поместить в один каталог.
Курс с примерами решений практических работ:
android-приложение, pdf-версия
Примеры модулей для Wowza Streaming Engine
Добавьте звуковую дорожку в поток только для видео с помощью модуля Java Wowza Streaming Engine
Используя модуль AddAudioTrack, добавьте звуковую дорожку в прямую трансляцию в Wowza Streaming Engine, прежде чем отправлять ее в Akamai.
Проверка подключений к серверу Akamai с авторизацией Akamai G2O с использованием прослушивателя VHost Wowza Streaming Engine
С помощью прослушивателя vhost AkamaiValidate проверьте процесс запроса и подключения потоков на основе HTTP из исходных HTTP-приложений в Wowza Streaming Engine.
Отправка статистики подключений и потоков в Google Analytics с помощью Java-модуля Wowza Streaming Engine
Настройте модуль Wowza Streaming Engine ModuleAnalytics для отправки данных о подключениях приложений и потоках в Google Analytics.
Микшируйте аудио и видео из разных источников в прямом эфире с помощью Java-модуля Wowza Streaming Engine
Объедините отдельные аудио- и видеоисточники в один поток с помощью ModuleAVMix для Wowza Streaming Engine.
Занесите поток в сеансе в черный список с помощью прослушивателя сервера Wowza Streaming Engine и поставщика HTTP
Используйте прослушиватель сервера BlacklistStreams и поставщика HTTP, чтобы заблокировать поток в сеансе и постоянно заносить его в черный список после перезапуска сервера.
Фильтрация воспроизведений только для аудио в автоматически сгенерированном многобитовом плейлисте Apple HLS с помощью Java-модуля Wowza Streaming Engine
Используйте модуль CupertinoAutoMultibitrateFilter для фильтрации воспроизведений только для аудио с битрейтом для игроков, у которых возникают проблемы с правильным воспроизведением потоков Apple HLS.
Дублируйте потоки в другой экземпляр приложения с помощью Java-модуля Wowza Streaming Engine
Используйте модуль DuplicateStreams для копирования потоков из одного экземпляра приложения в другой на том же сервере Wowza Streaming Engine.
Управляйте потоками, записываемыми устройством записи nDVR, с помощью Java-модуля Wowza Streaming Engine
Используйте модуль DvrRecorderControl, чтобы определить, какие потоки записываются устройством записи nDVR Wowza Streaming Engine.
Динамическое управление потоками класса Stream с помощью Java-модуля Wowza Streaming Engine
Используйте модуль HTTPStreamControl для Wowza Streaming Engine для управления потоками класса Stream и списками воспроизведения с помощью HTTP-запросов.
Мониторинг пропускной способности опубликованных потоков с помощью Java-модуля Wowza Streaming Engine
Используйте модуль LimitPublishedStreamBandwidth для Wowza Streaming Engine для автоматического отключения потоков, превышающих установленный предел пропускной способности.
Ограничьте количество зрителей потока с помощью Java-модуля Wowza Streaming Engine
Установите максимальное количество зрителей на поток на уровне приложения или потока с помощью модуля LimitStreamViewer в Wowza Streaming Engine.
Автоматическая запись потоков с помощью Java-модуля Wowza Streaming Engine
Используйте модуль LiveStreamRecordAutoRecord для автоматической записи входящих потоков в приложении Wowza Streaming Engine с использованием параметров StreamRecorder по умолчанию для приложения.
Загрузите и заблокируйте приложение с прослушивателем сервера Wowza Streaming Engine
Используйте прослушиватель сервера LoadAndLockAppInstances при запуске Wowza Streaming Engine, если вам нужно, чтобы приложение загружалось и оставалось загруженным, пока сервер не будет остановлен.
Зацикливать преролл до начала прямой трансляции с помощью Java-модуля Wowza Streaming Engine
Используйте Java-модуль LoopUntilLive Wowza Streaming Engine для настройки воспроизведения видео перед началом прямой трансляции и после ее окончания.
Получите локальный доступ к содержимому, прежде чем обращаться к удаленному источнику с помощью Java-модуля Wowza Streaming Engine
Используйте Java-модуль MediaCacheLocalContent Wowza Streaming Engine, чтобы сделать локально сохраненный контент доступным до его передачи в удаленный источник Media Cache.
Храните файлы SMIL и ресурсы VOD в разных местах с помощью Java-модуля Wowza Streaming Engine
Используйте Java-модуль MediaListPathSelector Wowza Streaming Engine для хранения файлов SMIL и связанных ресурсов VOD в разных каталогах содержимого.
Выберите несколько дорожек из файла VOD с помощью модуля Java Wowza Streaming Engine
Используйте модуль MultiTrackVOD, чтобы выбрать, какие дорожки будут отправлены игрокам в файле VOD с несколькими дорожками видео, аудио или данных в Wowza Streaming Engine.
Управляйте тем, какие потоки пакетируются для потоковой передачи HTTP, с помощью Java-модуля Wowza Streaming Engine
Используйте модуль PacketizerControl, чтобы контролировать, какие потоки пакетируются для потоковой передачи HTTP с помощью Wowza Streaming Engine.
Управляйте доступом к вашему приложению, проверяя реферальный домен с помощью Java-модуля Wowza Streaming Engine
. Используйте модуль RefererValidate для управления доступом к вашим потокам без RTMP-плеера на основе реферального домена.
Загружайте записанные медиафайлы в корзину Amazon S3 с помощью Java-модуля Wowza Streaming Engine
Используйте Java-модуль S3Upload Wowza Streaming Engine для загрузки записанных медиафайлов в корзину Amazon S3.
Расписание потоковой передачи с помощью Java-модуля Wowza Streaming Engine
Используйте модуль StreamPublisher для планирования потоков и списков воспроизведения для Wowza Streaming Engine.
Динамически разрешайте потоковые запросы пограничного сервера к исходным серверам с помощью Java-модуля Wowza Streaming Engine
. Разрешайте пограничные запросы к нескольким исходным серверам с помощью модуля StreamResolver для Wowza Streaming Engine.
Отключение подключенных клиентов по истечении заданного периода времени с помощью Java-модуля Wowza Streaming Engine
Используйте модуль TimedDisconnect для отключения игроков от приложений Wowza Streaming Engine по истечении заданного времени.
Управляйте транскодированием потоков с помощью Java-модуля Wowza Streaming Engine
Управляйте транскодированием потоков в приложении с помощью модуля TranscoderControl в Wowza Streaming Engine.
Создание моментальных снимков перекодированного потока с помощью Java-модуля Wowza Streaming Engine
Используйте Java-модуль TranscoderTimedSnapshot Wowza Streaming Engine для создания снимков перекодированного потока через равные промежутки времени.
Перемещение записей прямых трансляций с помощью Java-модуля Wowza Streaming Engine
Используйте Java-модуль MediaWriterFileMover Wowza Streaming Engine для копирования или перемещения файлов после их записи на диск.
Безопасная публикация из RTMP-кодировщика, который не поддерживает аутентификацию с помощью Java-модуля Wowza Streaming Engine
Публикация из RTMP-кодировщика, который не поддерживает аутентификацию по имени пользователя и паролю с использованием Java-модуля SecureURLParams Wowza Streaming Engine.
Интеграция аутентификации пользователей Wowza Streaming Engine с внешними системами с использованием Java-модуля Wowza Streaming Engine
Используйте модуль ModuleCoreSecurity для перехвата запросов имени пользователя и пароля для использования базы данных вместо файла паролей для аутентификации кодировщиков с помощью Wowza Streaming Engine.
Включите географическую блокировку с помощью прослушивателя сервера Wowza Streaming Engine и модуля Java
Используйте надстройку GeoIP и ее модуль ModuleGeoIP, чтобы включить географическую блокировку для подключений RTMP, HTTP и RTSP к Wowza Streaming Engine с IP-адресов в указанных странах.
Получите статистику производительности HTTP и RTP с помощью Java-модуля Wowza Streaming Engine
Соберите статистику производительности для потоков с помощью этого модуля Java API Wowza Streaming Engine.
Модули Python
Любой текстовый файл с расширением .py
, содержащий код Python, по сути является модулем. Различные объекты Python, такие как функции, классы, переменные, константы и т. д., определенные в одном модуле, можно сделать доступными для сеанса интерпретатора или другого сценария Python с помощью импорт
выписка.
Функции, определенные во встроенных модулях, необходимо импортировать перед использованием. Аналогично, пользовательский модуль может иметь в себе один или несколько пользовательских объектов Python. Эти объекты можно импортировать в сеанс интерпретатора или другой скрипт.
Если алгоритм программирования требует определения множества функций и классов, они логически организованы в модули. В одном модуле хранятся классы, функции и другие ресурсы аналогичной значимости. Такая модульная структура кода упрощает его понимание, использование и сопровождение.
Создание модуля
Ниже показан скрипт Python, содержащий определение функции sum()
. Он сохраняется как calc.py
.
сумма по умолчанию (x, y): вернуть х + у
Импорт модуля
Теперь мы можем импортировать этот модуль и выполнить функцию sum()
в оболочке Python.
>>> импорт вычисл. >>> расчет.сумма(5, 5) 10
Таким же образом, чтобы использовать вышеуказанный модуль calc
в другом скрипте Python, используйте оператор импорта.
Каждый модуль, встроенный или изготовленный на заказ, является объектом класса модуля. Проверьте тип различных модулей, используя встроенную функцию type()
, как показано ниже.
>>> импортировать математику >>> тип(математика) <класс 'модуль'> >>> импортировать расчет >>> тип(расч.) <класс 'модуль'>
Переименование импортированного модуля
Используйте ключевое слово as
, чтобы переименовать импортированный модуль, как показано ниже.
>>> импортировать математику как кал >>> кал.лог(4) 1.3862943611198906
из .. заявление об импорте
Приведенный выше оператор импорта загрузит все ресурсы модуля в текущей рабочей среде (также называемой пространством имен).
Используя этот синтаксис, можно импортировать определенные объекты из модуля. Например, следующий модуль calc.
содержит три функции. py
сумма по умолчанию (х, у): вернуть х + у среднее значение по умолчанию (x, y): вернуть (х + у)/2 степень защиты (х, у): вернуть х**у
Теперь мы можем импортировать одну или несколько функций, используя оператор from…import. Например, следующий код импортирует только две функции из файла test.py.
>>> из суммы импорта функций, среднее >>> сумма(10, 20) 30 >>> среднее(10, 20) 15 >>> мощность(2, 4)
В следующем примере импортируется только одна функция — сумма.
>>> из суммы импорта функций >>> сумма(10, 20) 30 >>> среднее(10, 20)
Вы также можете импортировать все его функции, используя синтаксис from...import *
.
>>> из импорта функций * >>> сумма(10, 20) 30 >>> среднее(10, 20) 15 >>> мощность(2, 2) 4
Путь поиска модуля
Когда оператор импорта встречается либо в интерактивном сеансе, либо в сценарии:
- Сначала интерпретатор Python пытается найти модуль в текущем рабочем каталоге.
- Если он не найден, выполняется поиск каталогов в переменной окружения PYTHONPATH.
- Если он все еще не найден, он ищет каталог установки по умолчанию.
При запуске интерпретатор Python помещает все вышеуказанные местоположения в список, возвращаемый атрибутом sys.path.
>>> импорт системы >>> sys.path ['','C:\\python36\\Lib\\idlelib', 'C:\\python36\\python36.zip', 'C:\\python36\\DLL', 'C:\\python36\\lib', 'C:\\python36', 'C:\\Users\\acer\\AppData\\Roaming\\Python\\Python36\\site-packages', 'C:\\python36\\lib\\сайт-пакеты']
Если требуемый модуль отсутствует ни в одном из указанных выше каталогов, выдается сообщение ModuleNotFoundError
.
>>> импортировать MyModule Traceback (последний последний вызов): Файл "", строка 1, в ModuleNotFoundError: нет модуля с именем «MyModule»
Перезагрузка модуля
Предположим, вы уже импортировали модуль и используете его. Однако владелец модуля добавил или изменил некоторые функции после того, как вы его импортировали. Таким образом, вы можете перезагрузить модуль, чтобы получить последний модуль, используя
reload()
функция модуля imp
, как показано ниже.
>>> импорт имп >>> имп.перезагрузка(расч.) <модуль 'calc' (встроенный)>
Получение справки по модулям
Используйте функцию help(), чтобы узнать методы и свойства модуля. Например, позвоните в справку («математика»)
, чтобы узнать о математическом модуле.
Если вы уже импортировали модуль, укажите его имя, например. справка(математика)
.
Как показано выше, вы можете увидеть имена и описания методов. Он не будет отображать страницы справки, оканчивающиеся на —More—. Нажмите Enter, чтобы увидеть дополнительную справку.
Вы также можете использовать функцию dir(), чтобы узнать имена и атрибуты модуля.
Узнайте об атрибутах модуля в следующей главе.
ссылка на файл go.mod — язык программирования Go
Каждый модуль Go определяется файлом go.mod, который описывает свойства, включая его зависимости от других модулей и версий Go.
К этим свойствам относятся:
- Текущий путь модуля модуля . Это должно быть место, откуда модуль можно загрузить с помощью инструментов Go, таких как код модуля расположение репозитория. Это служит уникальным идентификатором в сочетании с номером версии модуля. Это также префикс пути к пакету для все пакеты в модуле. Подробнее о том, как Go находит модуль, см. Справочник по модулям Go.
- Минимальная версия Go , необходимая для текущего модуля.
- Список минимальных версий других модулей , требуемых текущим модулем.
- Инструкции, опционально для заменить требуемый модуль на другой
версия модуля или локальный каталог, или исключить конкретную версию
необходимый модуль.
Go создает файл go.mod при запуске мода go init
команда. В следующем примере создается файл go.mod,
установка пути модуля модуля к example/mymodule:
$ Пример инициализации модуля go mod/mymodule
Используйте команды go
для управления зависимостями. Команды гарантируют, что
требования, описанные в вашем файле go.mod, остаются неизменными, а содержание
ваш файл go.mod действителен. Эти команды включают go get
и go mod tidy
и go mod edit
команды.
Справку по командам go
см. в разделе Команда go.
Вы можете получить помощь из командной строки, набрав go help
имя-команды , as
с иди помоги мод приборки
.
См. также
- Инструменты Go вносят изменения в файл go.mod по мере их использования для управления
зависимости. Дополнительные сведения см. в разделе Управление зависимостями.
- Дополнительные сведения и ограничения, связанные с файлами go.mod, см. в модулях Go. ссылка.
Пример
Файл go.mod содержит директивы, как показано в следующем примере. Это описано где-то в этой теме.
Модульexample.com/mymodule перейти 1.14 требовать ( example.com/othermodule v1.2.3 example.com/thismodule v1.2.3 example.com/thatmodule v1.2.3 ) заменить example.com/thatmodule => ../thatmodule исключить example.com/thismodule v1.3.0
модуль
Объявляет путь к модулю, который является уникальным идентификатором модуля. (в сочетании с номером версии модуля). Путь к модулю становится префикс импорта для всех пакетов, содержащихся в модуле.
Подробнее см. директиву модуля
в
Справочник по модулям Go.
Синтаксис
модуль модуль-путь
- модуль-путь
- Путь к модулю, обычно расположение репозитория, из которого
модуль можно загрузить с помощью инструментов Go.
Для версий модуля v2 и позже это значение должно заканчиваться основным номером версии, например
/v2
.
Примеры
Следующие примеры заменяют example.com
для домена репозитория из
который модуль может быть загружен.
Примечания
Путь к модулю должен однозначно идентифицировать ваш модуль. Для большинства модулей путь
URL-адрес, по которому команда go
может найти код (или перенаправление на код).
Для модулей, которые никогда не будут загружаться напрямую, путь к модулю
может быть просто какое-то имя, которым вы управляете, которое обеспечит уникальность. Префикс
Пример /
также зарезервирован для использования в подобных примерах.
Дополнительные сведения см. в разделе Управление зависимостями.
На практике путь к модулю обычно представляет собой домен репозитория источника модуля.
и путь к коду модуля в репозитории. Команда go
использует эту форму при загрузке версий модуля для разрешения зависимостей
от имени пользователя модуля.
Даже если вы изначально не собираетесь делать свой модуль доступным для использования из другого кода, рекомендуется использовать путь к репозиторию, который поможет вам не придется переименовывать модуль, если вы опубликуете его позже.
Если сначала вы не знаете окончательное расположение репозитория модуля, рассмотрите временно используя безопасную замену, такую как имя домена, которым вы владеете, или имя, которым вы управляете (например, название вашей компании), а также путь следования из имени модуля или исходного каталога. Подробнее см. Управление зависимостями.
Например, если вы работаете в каталоге stringtools
, ваш временный
путь к модулю может быть
, как в следующем примере:
где название компании название вашей компании:
go mod init <название компании>/stringtools
перейти
Указывает, что модуль был написан с учетом семантики версии Go.
указан директивой.
Для получения дополнительной информации см. директиву go
в
Справочник по модулям Go.
Синтаксис
перейти минимальная версия
- минимальная версия
- Минимальная версия Go, необходимая для компиляции пакетов в этом модуле.
Примеры
- Модуль должен работать на Go версии 1.14 или выше:
перейти 1.14
Примечания
Директива go
изначально предназначалась для поддержки обратной несовместимости
изменения в языке Go (см. Go 2
переход). не было несовместимых
язык изменился с тех пор, как были введены модули, но директива go
по-прежнему
влияет на использование новых языковых функций:
- Для пакетов внутри модуля компилятор отклоняет использование функций языка
введен после версии, указанной
иди директива
. Например, если модуль имеет директивуgo 1.12
, его пакеты не могут использовать числовые литералы вроде1_000_000
, которые были представлены в Go 1.13.
- Если более старая версия Go собирает один из пакетов модуля и сталкивается с ошибкой
ошибка компиляции, ошибка отмечает, что модуль был написан для более новой версии Go
версия. Например, предположим, что модуль имеет
go 1.13
, а пакет использует числовой литерал1_000_000
. Если этот пакет собран с помощью Go 1.12, компилятор отмечает, что код написан для Go 1.13.
Кроме того, команда go
изменяет свое поведение в зависимости от версии
указано в директиве go
. Это имеет следующие эффекты:
- В версии
go 1.14
или более поздней версии может быть включено. Если файлvendor/modules.txt
присутствует и соответствуетgo.mod
, нет необходимости явно использовать флаг-mod=vendor
. - В
перейти на 1.16
или выше,все шаблоны пакетов
соответствуют только пакетам транзитивно импортируется пакетами и тестами в основной модуль.Это тот же набор пакетов, сохраненный от
перейти к поставщику модов
, так как были введены модули. В более низкие версии,все
также включают тесты пакетов, импортированных пакетами в основной модуль, тесты этих пакетов и так далее. - В
перейти на 1.17
или выше:- Файл
go.mod
содержит явное требованиеgo 1.16
и ниже косвенная зависимость включается только при минимальном в противном случае выбор версии выберите другую версию.) Эта дополнительная информация включает график модуля обрезка и ленивый модуль загрузка. - Поскольку может быть гораздо больше
// косвенных
зависимостей, чем в предыдущемидут версии
, косвенные зависимости записываются в отдельный блок в файлеgo.mod
. -
поставщик модов go
опускаетgo.
иmod
файлы go.sum
для вендоров зависимости. (Это позволяет вызывать командуgo
внутри подкаталогипоставщика
для определения правильного основного модуля.) -
go mod vendor
записывает версиюgo
из каждой зависимостиgo.mod
файл вvendor/modules.txt
.
- Файл
Файл go.mod
может содержать не более одной директивы go
. Большинство команд добавят go
директива с текущей версией Go, если она отсутствует.
требуется
Объявляет модуль как зависимость текущего модуля, указывая требуется минимальная версия модуля.
Подробнее см. директиву require
в
Справочник по модулям Go.
Синтаксис
требуется путь к модулю версия модуля
- модуль-путь
- Путь к модулю, обычно являющийся конкатенацией исходных файлов модуля.
домен репозитория и имя модуля. Для версий модуля v2 и выше: это значение должно заканчиваться основным номером версии, например
/v2
. - версия модуля
- Версия модуля. Это может быть либо номер версии выпуска, например как v1.2.3, или номер псевдоверсии, сгенерированный Go, например v0.0.0-20200921210052-fa0125251cc4.
Примеры
Примечания
Когда вы запускаете команду go
, такую как go get
, Go вставляет требует
директив
для каждого модуля, содержащего импортированные пакеты. Когда модуль еще не помечен
свой репозиторий, Go присваивает псевдономер версии, который он генерирует, когда вы запускаете
команда.
Вы можете сделать так, чтобы Go требовал модуль из места, отличного от его репозитория,
используя директиву заменить
.
Дополнительные сведения о номерах версий см. в разделе Нумерация версий модулей.
Дополнительные сведения об управлении зависимостями см. в следующих разделах:
- Добавление зависимости
- Получение конкретной версии зависимости
- Обнаружение доступных обновлений
- Обновление или понижение версии зависимости
- Синхронизация зависимостей вашего кода
заменить
Заменяет содержимое модуля определенной версии (или всех версий) на другую версию модуля или с локальным каталогом. Инструменты Go будут использовать путь замены при разрешении зависимости.
Для получения дополнительной информации см. заменить директиву
в
Справочник по модулям Go.
Синтаксис
заменить путь-модуля [версия-модуля] => путь-замены [версия-замены]
- модуль-путь
- Путь модуля для замены.
- версия модуля
- Дополнительно. Конкретная версия для замены. Если этот номер версии
опущены, все версии модуля заменяются содержимым на
правая сторона стрелки.
- путь замены
- Путь, по которому Go должен искать нужный модуль. Это может быть путь к модулю или путь к каталогу в локальной файловой системе сменный модуль. Если это путь к модулю, вы должны указать замена версии значение. Если это локальный путь, вы не можете использовать замена версии значение.
- сменная версия
- Версия сменного модуля. Замещающая версия может только следует указать, если replace-path — это путь к модулю (не локальный каталог).
Примеры
Замена на форк репозитория модулей
В следующем примере любая версия example.com/othermodule заменяется с указанным ответвлением его кода.
требуется example.com/othermodule v1.2.3 заменить example.com/othermodule => example.com/myfork/othermodule v1.2.3-fixed
При замене одного пути к модулю другим не изменяйте операторы импорта для пакетов в модуле, который вы заменяете.
Дополнительные сведения об использовании разветвленной копии кода модуля см. в разделе Требование внешнего модуля. код из собственного форка репозитория.
Замена другим номером версии
В следующем примере указывается, что следует использовать версию v1.2.3 вместо любая другая версия модуля.
требуется example.com/othermodule v1.2.2 заменить example.com/othermodule => example.com/othermodule v1.2.3
В следующем примере модуль версии v1.2.5 заменяется версией v1.2.3 тот самый модуль.
заменить example.com/othermodule v1.2.5 => example.com/othermodule v1.2.3
Замена местным кодом
В следующем примере указывается, что локальный каталог следует использовать в качестве замена для всех версий модуля.
требуется example.com/othermodule v1.2.3 заменить example.com/othermodule => ../othermodule
В следующем примере указывается, что локальный каталог следует использовать в качестве замена только для v1.
2.5.
требуется example.com/othermodule v1.2.5 заменить example.com/othermodule v1.2.5 => ../othermodule
Дополнительные сведения об использовании локальной копии кода модуля см. в разделе Требование кода модуля в локальный каталог.
Примечания
Используйте заменить директиву
, чтобы временно заменить значение пути модуля на
другое значение, если вы хотите, чтобы Go использовал другой путь для поиска модуля.
источник. Это приводит к перенаправлению поиска Go для модуля на
местонахождение замены. Вам не нужно менять пути импорта пакетов, чтобы использовать
путь замены.
Используйте директивы exclude
и replace
для управления зависимостью во время сборки.
разрешение при сборке текущего модуля. Эти директивы игнорируются в
модули, которые зависят от текущего модуля.
Директива replace
может быть полезна в следующих ситуациях:
- Вы разрабатываете новый модуль, кода которого еще нет в репозитории.
Ты хотите протестировать с клиентами, используя локальную версию.
- Вы обнаружили проблему с зависимостью, клонировали зависимость репозиторий, и вы тестируете исправление в локальном репозитории.
Обратите внимание, что директива replace
сама по себе не добавляет модуль в
график модулей. А требуется директива
который относится к замененной версии модуля, также необходимо либо в основном
файл модуля
go.mod
или файл зависимости go.mod
. Если у вас нет
конкретную версию для замены, можно использовать поддельную версию, как в примере
ниже. Обратите внимание, что это сломает модули, которые зависят от вашего модуля, так как заменить директивы
применяются только в основном модуле.
требуется example.com/mod v0.0.0-replace заменить example.com/mod v0.0.0-replace => ./mod
Дополнительные сведения о замене необходимого модуля, в том числе об использовании инструментов Go для создания
изменить, см. :
- Требование кода внешнего модуля из собственного репозитория вилка
- Требуется код модуля в локальном каталог
Дополнительные сведения о номерах версий см. в разделе Версия модуля. нумерация.
исключить
Указывает модуль или версию модуля, которые следует исключить из списка текущего модуля. график зависимости.
Подробнее см. исключить директиву
в
Справочник по модулям Go.
Синтаксис
исключить модуль-путь модуль-версия
- модуль-путь
- Путь модуля для исключения.
- версия модуля
- Исключаемая версия.
Пример
Примечания
Используйте директиву exclude
, чтобы исключить определенную версию модуля, который
косвенно требуется, но не может быть загружен по какой-то причине. Например, вы можете
используйте его, чтобы исключить версию модуля с неверной контрольной суммой.
Используйте директивы exclude
и replace
для управления зависимостью во время сборки.
разрешение при сборке текущего модуля (основной модуль, который вы создаете).
Эти директивы игнорируются в модулях, зависящих от текущего модуля.
Вы можете использовать команду go mod edit
чтобы исключить модуль, как в следующем примере.
перейти к редактированию мода -exclude=example.com/[email protected]
Дополнительные сведения о номерах версий см. Нумерация версий модуля.
втянуть
Указывает, что версия или диапазон версий модуля, определенные go.mod
не следует зависеть. Директива retract
полезна, когда версия была
опубликована преждевременно или серьезная проблема была обнаружена после того, как версия была
опубликовано.
Для получения дополнительной информации см. директиву отзыва
в
Справочник по модулям Go.
Синтаксис
втягивать версия // обоснование втянуть [ младшая версия , младшая версия ] // обоснование
- версия
- Одна версия для отзыва.
- низкая версия
- Нижняя граница диапазона версий для отзыва.
- высшая версия
- Верхняя граница диапазона версий для отзыва. Обе версии -младшая и версии включены в ассортимент.
- обоснование
- Необязательный комментарий, объясняющий опровержение. Может отображаться в сообщениях Пользователь.
Пример
Отзыв одной версии
retract v1.1.0 // Опубликовано случайно.
Отказ от ряда версий
retract [v1.0.0,v1.0.5] // Сборка не работает на некоторых платформах.
Примечания
Используйте директиву retract
, чтобы указать, что предыдущая версия вашего модуля
не следует использовать. Пользователи не будут автоматически обновляться до отозванной версии
с go get
, go mod tidy
или другие команды. Пользователи не увидят отозванный
версия как доступное обновление с go list -m -u
.
Отозванные версии должны оставаться доступными, чтобы пользователи, которые уже зависят от них
могут создавать свои пакеты. Даже если отозванная версия будет удалена из
исходный репозиторий, он может оставаться доступным на зеркалах, таких как
proxy.golang.org. Пользователи, зависящие от отозванных
версии могут быть уведомлены, когда они запустят go get
или перейти по списку -m -u
на
сопутствующие модули.
Команда go
обнаруживает отозванные версии, читая директивы retract
.
в файле go.mod
в последней версии модуля. Последняя версия,
в порядке старшинства:
- Самая последняя версия выпуска, если таковая имеется
- Самая старшая предварительная версия, если таковая имеется
- Псевдоверсия для верхушки дефолтной ветки репозитория.
Когда вы добавляете опровержение, вам почти всегда нужно пометить новую, более высокую версию
поэтому команда увидит его в последней версии модуля.