Go: инструментарий (продолжение)

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Go (продолжение)

Непрочитанное сообщение Olej » 26 янв 2022, 03:08

Olej писал(а):
20 янв 2022, 00:55
По результатам этих разбирательств мной даже был написан конспект (язык Go), последнюю редакцию которого можно найти (с архивом примеров кодов) здесь: Go конспект
Упоминаемый раньше конспект Go подчищен и подправлен по ходу работы с этой темой.
Можно его (в редакции 1.44) можно скачать здесь: конспект Go (обновление).

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Go (продолжение)

Непрочитанное сообщение Olej » 31 янв 2022, 13:13

Изображение
Olej писал(а):
14 май 2016, 23:01
Эту книгу для ознакомления можете свободно скачать А. Донован Б. Керниган - Язык программирования Go (2016)
Язык программирования Go (torrent)
Год издания: 2016
Автор: Алан А. А. Донован, Брайан У. Керниган
Переводчик: И. Красикова
Издательство: Вильямс
ISBN: 978-5-8459-2051-5, 978-0-13-419044-0
А архив примеров кодов (достаточно интересных) из книги - здесь: https://github.com/adonovan/gopl.io :

Код: Выделить всё

ch1 Update to gobook@27cf7b490526a0a0751ff12ed7cc4acd8afa2edc 6 years ago
ch10 Update to gobook@c6d7a22edd03e7738c38d5baa2174ff325d8d863 6 years ago
ch11 Update to gobook@4e7af548bbfd4df6c667221ed120f05a06591fdf 6 years ago
ch12 Update to gobook@4fdc3c0a831c14c716c2c013e42268f6d21a9a13 6 years ago
ch13 Update to gobook@4e7af548bbfd4df6c667221ed120f05a06591fdf 6 years ago
ch2 ch2/popcount: show go1.7 SSA benchmarks 5 years ago
ch3 Update to gobook@5e58e0a92b96bee61856a8ce6e75ed849bd504af 6 years ago
ch4 Update to gobook@039ca5f7ddfb44bec546dbdc940c015d6e3912e6 6 years ago
ch5 Update to gobook@c6d7a22edd03e7738c38d5baa2174ff325d8d863 6 years ago
ch6 Update to gobook@4fdc3c0a831c14c716c2c013e42268f6d21a9a13 6 years ago
ch7 Use *lexer.describe in parse error message 2 years ago
ch8 Update to gobook@0a3e8d997823052c6a8575feca6e515ac6f8299d 6 years ago
ch9 Update to gobook@fbe1ed9c21e6645482a25ac4debe81bab4c4fde2 5 years ago
CNAME Create CNAME 2 years ago
README.md remove warning about missing packages 6 years ago
go.mod Add Go module 4 months ago
go.sum Add Go module 4 months ago

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Go (продолжение)

Непрочитанное сообщение Olej » 11 фев 2022, 16:08

Но для меня (и не только для меня, почему язык Go у многих так и стал "модным") самым интересным и принципиально новым в Go является тема параллельного выполнения и использования многопроцессорных систем SMP программами Go.
Это насколько важная и объёмная тема, что я вынес всё её обсуждение, которое первоначально располагалось здесь, в отдельную тему:
Go : параллельное выполнение

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Go (продолжение)

Непрочитанное сообщение Olej » 11 фев 2022, 17:29

Маленькая книга о Go
От автора перевода (я пока не знаю автора):
Решил попробовать сделать вольный перевод книги The Little Go Book от Karl Seguin. Эта книга бесплатна и распространяется под лицензиецией Attribution-NonCommercial-ShareAlike 4.0 International. Оригинал доступен на GitHub.
Вполне стоит почитать:
Содержание
Введение
Глава 1 – Основы
Глава 2 – Структуры
Глава 3 – Массивы, карты и срезы
Глава 4 – Организация кода и интерфейсы
Глава 5 – Лакомые кусочки
Глава 6 – Конкурентность
Заключение
Скачать книгу в формате ePub
Скачать книгу в формате MOBI

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Go (продолжение)

Непрочитанное сообщение Olej » 12 фев 2022, 17:31

Olej писал(а):
23 янв 2022, 17:49
Это подробно объясняется Робом Пайком в "Меньше в геометрической прогрессии".
Это настолько интересная статья от автора Go, что я решил её перевести для быстрого всеобщего ознакомления. Предварительный (начерно ... ещё тёпленький, только из печи ;-) ) перевод - прилагаю.

Это статья о философии Go. Для тех, кто только начинает использовать на практике Go, это очень важно!
Точнее её нужно бы назвать: "Go против C++" ... это серьёзный камень в огород C++.
Там Роб Пайк списком перечисляет те вещи, которые радикально отличают Go и от C и от C++:
Я составил список значительных упрощений в Go относительно C и C++:
• регулярный синтаксис (для разбора не нужна таблица символов);
• сборка мусора (исключительно);
• отсутствие заголовочных файлов;
• явные зависимости;
• отсутсвие циклических зависимостей;
• константы - это просто числа;
• int и int32 — это разные типы;
• регистр букв имён устанавливает видимость;
• методы для любого типа (без классов);
• без наследования подтипов (без подклассов);
• инициализация на уровне пакета и строго определенный порядок инициализации;
• файлы компилируемые вместе в пакет;
• глобальные переменные уровня пакета представлены в любом порядке;
• никаких арифметических преобразований (помогают константы);
• интерфейсы являются неявными (без объявления «реализует»);
• встраивание (без повышения до суперкласса);
• методы объявляются как функции (без специальной локализации);
• методы - это просто функции;
• интерфейсы - это просто методы (без данных);
• методы отождествляются только по имени (не по типу);
• без конструкторов и деструкторов;
• постинкремент и постдекремент - это операторы, а не выражения;
• нет преинкремента или преддекремента;
• присваивание не является выражением;
• определен порядок вычислений в присвоениях, функциональных вызовах (без «точек следования», известных из C/C++1);
• нет арифметики указателей;
• память всегда обнуляется;
• допустимо брать адрес локальной переменной;
• нет указателя this в методах;
• сегментированные стеки;
• нет const или других типов аннотаций;
• нет шаблонов;
• нет исключительных ситуаций;
• встроенный тип строк, срезы, ассоциативные хэши;
• проверка границ массива;
Вложения
Less_is_more.4.odt
(34.29 КБ) 76 скачиваний

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Go : инструментарий (продолжение)

Непрочитанное сообщение Olej » 12 фев 2022, 18:43

Olej писал(а):
12 фев 2022, 17:31
Там Роб Пайк списком перечисляет те вещи, которые радикально отличают Go и от C и от C++:
Я составил список значительных упрощений в Go относительно C и C++:
• регулярный синтаксис (для разбора не нужна таблица символов);
• сборка мусора (исключительно);
• отсутствие заголовочных файлов;
• явные зависимости;
• отсутсвие циклических зависимостей;
• константы - это просто числа;
• int и int32 — это разные типы;
• регистр букв имён устанавливает видимость;
• методы для любого типа (без классов);
• без наследования подтипов (без подклассов);
• инициализация на уровне пакета и строго определенный порядок инициализации;
• файлы компилируемые вместе в пакет;
• глобальные переменные уровня пакета представлены в любом порядке;
• никаких арифметических преобразований (помогают константы);
• интерфейсы являются неявными (без объявления «реализует»);
• встраивание (без повышения до суперкласса);
• методы объявляются как функции (без специальной локализации);
• методы - это просто функции;
• интерфейсы - это просто методы (без данных);
• методы отождествляются только по имени (не по типу);
• без конструкторов и деструкторов;
• постинкремент и постдекремент - это операторы, а не выражения;
• нет преинкремента или преддекремента;
• присваивание не является выражением;
• определен порядок вычислений в присвоениях, функциональных вызовах (без «точек следования», известных из C/C++1);
• нет арифметики указателей;
• память всегда обнуляется;
• допустимо брать адрес локальной переменной;
• нет указателя this в методах;
• сегментированные стеки;
• нет const или других типов аннотаций;
• нет шаблонов;
• нет исключительных ситуаций;
• встроенный тип строк, срезы, ассоциативные хэши;
• проверка границ массива;
И поскольку философия Go, некоторыми своими существенными механизмами, отличается от традиционных более старых языков, то детализацию этих механизмов имеет смысл разбирать в отдельной теме... Таким же образом как созрела, а потом и была вынесена отдельно тема Go : параллельное выполнение.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Go : инструментарий (продолжение)

Непрочитанное сообщение Olej » 13 фев 2022, 22:07

Olej писал(а):
20 янв 2022, 12:19
Например относительно установки переменных окружения, в частности GOROOT:
Теперь возвращаясь к вопросам среды Go ...

Код: Выделить всё

olej@R420:~$ go help env
usage: go env [-json] [-u] [-w] [var ...]

Env prints Go environment information.

By default env prints information as a shell script
(on Windows, a batch file). If one or more variable
names is given as arguments, env prints the value of
each named variable on its own line.

The -json flag prints the environment in JSON format
instead of as a shell script.

The -u flag requires one or more arguments and unsets
the default setting for the named environment variables,
if one has been set with 'go env -w'.

The -w flag requires one or more arguments of the
form NAME=VALUE and changes the default settings
of the named environment variables to the given values.

For more about environment variables, see 'go help environment'.

Код: Выделить всё

olej@R420:~$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/olej/.cache/go-build"
GOENV="/home/olej/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/olej/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/lib/go-1.13"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/lib/go-1.13/pkg/tool/linux_amd64"
GCCGO="/usr/bin/gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build243017218=/tmp/go-build -gno-record-gcc-switches"
Olej писал(а):
20 янв 2022, 12:19
$GOPATH
В языке Go поиск программ и их зависимостей (например, import "пакет"), сначала выполняется в каталогах, прописанных в переменную $GOPATH, а затем - в переменной $GOROOT (путь установки go, по умолчанию /usr/lib/go).
Значение $GOPATH по умолчанию ~/go.
О переменных окружения Go:

Код: Выделить всё

olej@R420:~$ go help environment
The go command and the tools it invokes consult environment variables
for configuration. If an environment variable is unset, the go command
uses a sensible default setting. To see the effective setting of the
variable <NAME>, run 'go env <NAME>'. To change the default setting,
run 'go env -w <NAME>=<VALUE>'. Defaults changed using 'go env -w'
are recorded in a Go environment configuration file stored in the
per-user configuration directory, as reported by os.UserConfigDir.
The location of the configuration file can be changed by setting
the environment variable GOENV, and 'go env GOENV' prints the
effective location, but 'go env -w' cannot change the default location.
See 'go help env' for details.

General-purpose environment variables:

	GCCGO
		The gccgo command to run for 'go build -compiler=gccgo'.
	GOARCH
		The architecture, or processor, for which to compile code.
		Examples are amd64, 386, arm, ppc64.
	GOBIN
		The directory where 'go install' will install a command.
	GOCACHE
		The directory where the go command will store cached
		information for reuse in future builds.
	GODEBUG
		Enable various debugging facilities. See 'go doc runtime'
		for details.
	GOENV
		The location of the Go environment configuration file.
		Cannot be set using 'go env -w'.
	GOFLAGS
		A space-separated list of -flag=value settings to apply
		to go commands by default, when the given flag is known by
		the current command. Each entry must be a standalone flag.
		Because the entries are space-separated, flag values must
		not contain spaces. Flags listed on the command line
		are applied after this list and therefore override it.
	GOOS
		The operating system for which to compile code.
		Examples are linux, darwin, windows, netbsd.
	GOPATH
		For more details see: 'go help gopath'.
	GOPROXY
		URL of Go module proxy. See 'go help modules'.
	GOPRIVATE, GONOPROXY, GONOSUMDB
		Comma-separated list of glob patterns (in the syntax of Go's path.Match)
		of module path prefixes that should always be fetched directly
		or that should not be compared against the checksum database.
		See 'go help module-private'.
	GOROOT
		The root of the go tree.
	GOSUMDB
		The name of checksum database to use and optionally its public key and
		URL. See 'go help module-auth'.
	GOTMPDIR
		The directory where the go command will write
		temporary source files, packages, and binaries.

Environment variables for use with cgo:

	AR
		The command to use to manipulate library archives when
		building with the gccgo compiler.
		The default is 'ar'.
	CC
		The command to use to compile C code.
	CGO_ENABLED
		Whether the cgo command is supported. Either 0 or 1.
	CGO_CFLAGS
		Flags that cgo will pass to the compiler when compiling
		C code.
	CGO_CFLAGS_ALLOW
		A regular expression specifying additional flags to allow
		to appear in #cgo CFLAGS source code directives.
		Does not apply to the CGO_CFLAGS environment variable.
	CGO_CFLAGS_DISALLOW
		A regular expression specifying flags that must be disallowed
		from appearing in #cgo CFLAGS source code directives.
		Does not apply to the CGO_CFLAGS environment variable.
	CGO_CPPFLAGS, CGO_CPPFLAGS_ALLOW, CGO_CPPFLAGS_DISALLOW
		Like CGO_CFLAGS, CGO_CFLAGS_ALLOW, and CGO_CFLAGS_DISALLOW,
		but for the C preprocessor.
	CGO_CXXFLAGS, CGO_CXXFLAGS_ALLOW, CGO_CXXFLAGS_DISALLOW
		Like CGO_CFLAGS, CGO_CFLAGS_ALLOW, and CGO_CFLAGS_DISALLOW,
		but for the C++ compiler.
	CGO_FFLAGS, CGO_FFLAGS_ALLOW, CGO_FFLAGS_DISALLOW
		Like CGO_CFLAGS, CGO_CFLAGS_ALLOW, and CGO_CFLAGS_DISALLOW,
		but for the Fortran compiler.
	CGO_LDFLAGS, CGO_LDFLAGS_ALLOW, CGO_LDFLAGS_DISALLOW
		Like CGO_CFLAGS, CGO_CFLAGS_ALLOW, and CGO_CFLAGS_DISALLOW,
		but for the linker.
	CXX
		The command to use to compile C++ code.
	FC
		The command to use to compile Fortran code.
	PKG_CONFIG
		Path to pkg-config tool.

Architecture-specific environment variables:

	GOARM
		For GOARCH=arm, the ARM architecture for which to compile.
		Valid values are 5, 6, 7.
	GO386
		For GOARCH=386, the floating point instruction set.
		Valid values are 387, sse2.
	GOMIPS
		For GOARCH=mips{,le}, whether to use floating point instructions.
		Valid values are hardfloat (default), softfloat.
	GOMIPS64
		For GOARCH=mips64{,le}, whether to use floating point instructions.
		Valid values are hardfloat (default), softfloat.
	GOWASM
		For GOARCH=wasm, comma-separated list of experimental WebAssembly features to use.
		Valid values are satconv, signext.

Special-purpose environment variables:

	GCCGOTOOLDIR
		If set, where to find gccgo tools, such as cgo.
		The default is based on how gccgo was configured.
	GOROOT_FINAL
		The root of the installed Go tree, when it is
		installed in a location other than where it is built.
		File names in stack traces are rewritten from GOROOT to
		GOROOT_FINAL.
	GO_EXTLINK_ENABLED
		Whether the linker should use external linking mode
		when using -linkmode=auto with code that uses cgo.
		Set to 0 to disable external linking mode, 1 to enable it.
	GIT_ALLOW_PROTOCOL
		Defined by Git. A colon-separated list of schemes that are allowed
		to be used with git fetch/clone. If set, any scheme not explicitly
		mentioned will be considered insecure by 'go get'.
		Because the variable is defined by Git, the default value cannot
		be set using 'go env -w'.

Additional information available from 'go env' but not read from the environment:

	GOEXE
		The executable file name suffix (".exe" on Windows, "" on other systems).
	GOGCCFLAGS
		A space-separated list of arguments supplied to the CC command.
	GOHOSTARCH
		The architecture (GOARCH) of the Go toolchain binaries.
	GOHOSTOS
		The operating system (GOOS) of the Go toolchain binaries.
	GOMOD
		The absolute path to the go.mod of the main module,
		or the empty string if not using modules.
	GOTOOLDIR
		The directory where the go tools (compile, cover, doc, etc...) are installed.
И переведу то, что написано в заголовке этого сообщения:
Команда go и инструменты, которые она вызывает, обращаются к переменным среды для конфигурации.
Если переменная среды не установлена, команда go использует разумную настройку по умолчанию.
Чтобы увидеть действующую настройку переменная <NAME>, запустите 'go env <NAME>'.
Чтобы изменить настройку по умолчанию, запустите 'go env -w <ИМЯ>=<ЗНАЧЕНИЕ>'.
Значения по умолчанию измененные с помощью «go env -w» записываются в файл конфигурации среды Go,
хранящийся в каталоге конфигурации для каждого пользователя, как сообщает os.UserConfigDir.
Расположение файла конфигурации можно изменить, установив переменная среды GOENV,
а 'go env GOENV' печатает эффективное местоположение, но «go env -w» не может изменить местоположение по умолчанию.
Подробнее см. «go help env».

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Go : инструментарий (продолжение)

Непрочитанное сообщение Olej » 13 фев 2022, 22:13

Olej писал(а):
13 фев 2022, 22:07
О переменных окружения Go:

Код: Выделить всё

olej@R420:~$ go env GOENV
/home/olej/.config/go/env

olej@R420:~$ ls -l /home/olej/.config/go/env
ls: невозможно получить доступ к '/home/olej/.config/go/env': Нет такого файла или каталога

olej@R420:~$ ls -dl /home/olej/.config/g*
drwx------  5 olej olej 4096 фев 13 11:19 /home/olej/.config/geany
drwx------  2 olej olej 4096 фев  9 01:10 /home/olej/.config/gnome-games
drwxr-xr-x  2 olej olej 4096 мая  6  2021 /home/olej/.config/goa-1.0
drwx------ 32 olej olej 4096 окт  8 18:26 /home/olej/.config/google-chrome
drwx------  2 olej olej 4096 окт 14 23:58 /home/olej/.config/gtk-2.0
drwx------  2 olej olej 4096 фев 13 10:52 /home/olej/.config/gtk-3.0
Я этого пока не понимаю :-o ... - где дефаултные переменные среды Go?

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Go : инструментарий (продолжение)

Непрочитанное сообщение Olej » 14 фев 2022, 01:15

Olej писал(а):
13 фев 2022, 22:07
Значение $GOPATH по умолчанию ~/go.
Olej писал(а):
13 фев 2022, 22:07
GOPATH="/home/olej/go"

Код: Выделить всё

olej@R420:~$ ls -l `go env GOPATH`
итого 12
drwxrwxr-x 2 olej olej 4096 янв 20 03:02 bin
drwxrwxr-x 3 olej olej 4096 янв 20 02:41 pkg
drwxrwxr-x 8 olej olej 4096 фев 13 21:20 src
В каталоге `go env GOPATH`/src создаю каталоги для каждого из своих тестовых проектов (которые описываются здесь: Go : параллельное выполнение):

Код: Выделить всё

olej@R420:~/go/src$ pwd
/home/olej/go/src

olej@R420:~/go/src$ mkdir mtime

olej@R420:~/go/src$ mkdir mchan

olej@R420:~/go/src$ mkdir multy
Это прототипы моих проектов, которые пока простые, из одного файла, но могут быть сколь угодно сложными...
И помещаю туда файлы исходных кодов Go:

Код: Выделить всё

olej@R420:~/go/src$ ls `go env GOPATH`/src/mtime
mtime.go

olej@R420:~/go/src$ ls `go env GOPATH`/src/mchan
mchan.go

olej@R420:~/go/src$ ls `go env GOPATH`/src/multy
multy.go

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Go : инструментарий (продолжение)

Непрочитанное сообщение Olej » 14 фев 2022, 02:08

Olej писал(а):
14 фев 2022, 01:15
Это прототипы моих проектов, которые пока простые, из одного файла, но могут быть сколь угодно сложными...
И помещаю туда файлы исходных кодов Go:
А теперь из любого произвольного каталога файловой системы (важно только имя пользователя под которым я залогинен в системе) ... я даже специально для этого создам новый свежий каталог:

Код: Выделить всё

olej@R420:~/2022/Go/work$ pwd
/home/olej/2022/Go/work

olej@R420:~/2022/Go/work$ ls -a
.  ..
Делаю сборку своих проектов:

Код: Выделить всё

olej@R420:~/2022/Go/work$ go build multy

olej@R420:~/2022/Go/work$ go build mtime

olej@R420:~/2022/Go/work$ go build mchan

olej@R420:~/2022/Go/work$ ls -a
.  ..  mchan  mtime  multy
У меня появились (в этом каталоге!) 3 собранных бинарных исполнимых ELF-файлов:

Код: Выделить всё

olej@R420:~/2022/Go/work$ file *
mchan: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, Go BuildID=hJKnrnyzYTePKFKVubjn/FjZIJqAgWAWJp_rdnPtu/_PRjRBlMTFUhjMZSqpGb/XMa-uxVVl35BodOgcv0p, not stripped
mtime: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, Go BuildID=cZC99kqMvRDc4d2TKSVj/1hBpuJRqX70XeAmGAx-_/TAOltk030dddK19McI9W/ubZrd8RxMhJ8CkmvZ4Xw, not stripped
multy: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, Go BuildID=RyqIny51IzYHv50zNLEG/zHQucmK3bRfFyW676wLl/bnzAd5_qxFnGvJR_fwZW/szQZ-aoB0UCLV8bdAYb9, not stripped
(и как видно из этого вывода - они статически собранные)

Код: Выделить всё

olej@R420:~/2022/Go/work$ ls -al
итого 6464
drwxrwxr-x 2 olej olej    4096 фев 13 23:38 .
drwxrwxr-x 5 olej olej    4096 фев 13 23:36 ..
-rwxrwxr-x 1 olej olej 2284688 фев 13 23:38 mchan
-rwxrwxr-x 1 olej olej 2284876 фев 13 23:38 mtime
-rwxrwxr-x 1 olej olej 2038362 фев 13 23:37 multy

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 14 гостей