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

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

Модератор: Olej

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

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

Непрочитанное сообщение Olej » 09 фев 2024, 15:52

Olej писал(а):
09 фев 2024, 15:10
добавление в альтернативы
С удалением того что стало уже ненужным:

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

olej@R420:~$ sudo update-alternatives --remove go /home/olej/goroot/bin/go
[sudo] пароль для olej:

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

olej@R420:~$ sudo update-alternatives --list go
/lib/go-1.13/bin/go
/lib/go-1.18/bin/go
/usr/local/go/bin/go

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

olej@R420:~$ update-alternatives --display go
go - автоматический режим
  лучшая версия ссылки — /usr/local/go/bin/go
  ссылка сейчас указывает на /usr/local/go/bin/go
  ссылка go — /usr/bin/go
  подчинённая gofmt — /usr/bin/gofmt
/lib/go-1.13/bin/go — приоритет 60
/lib/go-1.18/bin/go — приоритет 75
/usr/local/go/bin/go — приоритет 85
  подчинённый gofmt: /usr/local/go/bin/gofmt

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

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

Непрочитанное сообщение Olej » 09 фев 2024, 17:02

Olej писал(а):
09 фев 2024, 13:12
получаем следующий облом
Теперь проверка того как будет из исходников собираться 1.22:

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

olej@R420:~/goroot/src$ time ./all.bash
Building Go cmd/dist using /usr/local/go. (go1.22.0 linux/amd64)
Building Go toolchain1 using /usr/local/go.
Building Go bootstrap cmd/go (go_bootstrap) using Go toolchain1.
Building Go toolchain2 using go_bootstrap and Go toolchain1.
Building Go toolchain3 using go_bootstrap and Go toolchain2.
Building packages and commands for linux/amd64.

##### Test execution environment.
# GOARCH: amd64
# CPU: Intel(R) Xeon(R) CPU E5-2470 v2 @ 2.40GHz
# GOOS: linux
# OS Version: Linux 5.15.0-94-generic #104-Ubuntu SMP Tue Jan 9 15:25:40 UTC 2024 x86_64

##### Testing packages.
ok  	archive/tar	0.160s
ok  	archive/zip	0.130s
ok  	bufio	0.054s
ok  	bytes	0.231s
ok  	cmp	0.003s
ok  	compress/bzip2	0.059s
ok  	compress/flate	0.339s
ok  	compress/gzip	2.687s
ok  	compress/lzw	0.009s
ok  	compress/zlib	0.030s
ok  	container/heap	0.006s
ok  	container/list	0.004s
ok  	container/ring	0.006s
ok  	context	0.023s
ok  	crypto	0.003s
ok  	crypto/aes	0.029s
ok  	crypto/cipher	0.011s
ok  	crypto/des	0.013s
ok  	crypto/dsa	0.005s
ok  	crypto/ecdh	0.072s
ok  	crypto/ecdsa	0.048s
ok  	crypto/ed25519	0.093s
ok  	crypto/elliptic	0.012s
ok  	crypto/hmac	0.005s
ok  	crypto/internal/alias	0.004s
ok  	crypto/internal/bigmod	0.106s
ok  	crypto/internal/boring	0.004s
ok  	crypto/internal/boring/bcache	0.170s
ok  	crypto/internal/edwards25519	0.126s
ok  	crypto/internal/edwards25519/field	0.024s
ok  	crypto/internal/nistec	0.260s
ok  	crypto/internal/nistec/fiat	0.004s [no tests to run]
ok  	crypto/md5	0.010s
ok  	crypto/rand	0.081s
ok  	crypto/rc4	0.048s
ok  	crypto/rsa	0.649s
ok  	crypto/sha1	0.049s
ok  	crypto/sha256	0.006s
ok  	crypto/sha512	0.021s
ok  	crypto/subtle	0.196s
ok  	crypto/tls	0.522s
ok  	crypto/x509	0.360s
ok  	database/sql	0.555s
ok  	database/sql/driver	0.003s
ok  	debug/buildinfo	0.009s
ok  	debug/dwarf	0.024s
ok  	debug/elf	0.273s
ok  	debug/gosym	0.455s
ok  	debug/macho	0.005s
ok  	debug/pe	0.021s
ok  	debug/plan9obj	0.003s
ok  	embed	0.004s [no tests to run]
ok  	embed/internal/embedtest	0.004s
ok  	encoding/ascii85	0.005s
ok  	encoding/asn1	0.005s
ok  	encoding/base32	0.022s
ok  	encoding/base64	0.007s
ok  	encoding/binary	0.006s
ok  	encoding/csv	0.014s
ok  	encoding/gob	2.004s
ok  	encoding/hex	0.005s
ok  	encoding/json	0.354s
ok  	encoding/pem	0.713s
ok  	encoding/xml	0.103s
ok  	errors	0.006s
ok  	expvar	0.005s
ok  	flag	0.050s
ok  	fmt	0.086s
ok  	go/ast	0.006s
ok  	go/build	3.092s
ok  	go/build/constraint	0.006s
ok  	go/constant	0.006s
ok  	go/doc	0.072s
ok  	go/doc/comment	1.210s
ok  	go/format	0.008s
ok  	go/importer	0.445s
ok  	go/internal/gccgoimporter	3.045s
ok  	go/internal/gcimporter	2.512s
ok  	go/internal/srcimporter	11.415s
ok  	go/parser	0.278s
ok  	go/printer	0.252s
ok  	go/scanner	0.005s
ok  	go/token	0.028s
ok  	go/types	8.799s
ok  	go/version	0.011s
ok  	hash	0.005s
ok  	hash/adler32	0.011s
ok  	hash/crc32	0.010s
ok  	hash/crc64	0.004s
ok  	hash/fnv	0.004s
ok  	hash/maphash	0.140s
ok  	html	0.004s
ok  	html/template	0.152s
ok  	image	0.076s
ok  	image/color	0.025s
ok  	image/draw	0.194s
ok  	image/gif	0.365s
ok  	image/jpeg	0.232s
ok  	image/png	0.498s
ok  	index/suffixarray	0.302s
ok  	internal/abi	0.056s
ok  	internal/buildcfg	0.003s
ok  	internal/chacha8rand	0.003s
ok  	internal/coverage/cformat	0.003s
ok  	internal/coverage/cmerge	0.003s
ok  	internal/coverage/pods	0.004s
ok  	internal/coverage/slicereader	0.003s
ok  	internal/coverage/slicewriter	0.003s
ok  	internal/coverage/test	0.014s
ok  	internal/cpu	0.016s
ok  	internal/dag	0.011s
ok  	internal/diff	0.011s
ok  	internal/fmtsort	0.014s
ok  	internal/fuzz	0.011s
ok  	internal/godebug	0.937s
ok  	internal/godebugs	0.010s
ok  	internal/gover	0.010s
ok  	internal/intern	0.546s
ok  	internal/itoa	0.010s
ok  	internal/platform	1.356s
ok  	internal/poll	0.326s
ok  	internal/profile	0.010s
ok  	internal/reflectlite	0.010s
ok  	internal/safefilepath	0.010s
ok  	internal/saferio	0.125s
ok  	internal/singleflight	0.026s
ok  	internal/testenv	0.568s
ok  	internal/trace	0.154s
ok  	internal/trace/v2	7.718s
ok  	internal/types/errors	1.051s
ok  	internal/unsafeheader	0.009s
ok  	internal/xcoff	0.013s
ok  	internal/zstd	0.811s
ok  	io	0.052s
ok  	io/fs	0.616s
ok  	io/ioutil	0.009s
ok  	log	0.013s
ok  	log/slog	0.055s
ok  	log/slog/internal/benchmarks	0.023s
ok  	log/slog/internal/buffer	0.005s
ok  	log/syslog	1.226s
ok  	maps	0.010s
ok  	math	0.015s
ok  	math/big	2.102s
ok  	math/bits	0.011s
ok  	math/cmplx	0.005s
ok  	math/rand	0.161s
ok  	math/rand/v2	0.344s
ok  	mime	0.012s
ok  	mime/multipart	0.991s
ok  	mime/quotedprintable	0.042s
ok  	net	9.150s
ok  	net/http	5.804s
ok  	net/http/cgi	0.420s
ok  	net/http/cookiejar	0.018s
ok  	net/http/fcgi	0.209s
ok  	net/http/httptest	0.057s
ok  	net/http/httptrace	0.005s
ok  	net/http/httputil	0.660s
ok  	net/http/internal	0.405s
ok  	net/http/internal/ascii	0.004s
ok  	net/http/pprof	5.104s
ok  	net/internal/socktest	0.004s
ok  	net/mail	0.008s
ok  	net/netip	0.678s
ok  	net/rpc	0.033s
ok  	net/rpc/jsonrpc	0.014s
ok  	net/smtp	0.029s
ok  	net/textproto	0.042s
ok  	net/url	0.012s
ok  	os	1.816s
ok  	os/exec	0.433s
ok  	os/exec/internal/fdtest	0.003s
ok  	os/signal	2.647s
ok  	os/user	0.017s
ok  	path	0.005s
ok  	path/filepath	0.037s
ok  	plugin	0.006s
ok  	reflect	0.670s
ok  	regexp	0.919s
ok  	regexp/syntax	1.685s
ok  	runtime	47.218s
ok  	runtime/cgo	0.005s
ok  	runtime/coverage	0.021s
ok  	runtime/debug	0.071s
ok  	runtime/internal/atomic	0.064s
ok  	runtime/internal/math	0.017s
ok  	runtime/internal/sys	0.006s
ok  	runtime/internal/syscall	0.003s
ok  	runtime/internal/wasitest	0.013s
ok  	runtime/metrics	0.033s
ok  	runtime/pprof	7.231s
ok  	runtime/trace	0.121s
ok  	slices	0.129s
ok  	sort	0.060s
ok  	strconv	0.525s
ok  	strings	0.190s
ok  	sync	0.376s
ok  	sync/atomic	2.653s
ok  	syscall	3.986s
ok  	testing	1.640s
ok  	testing/fstest	0.028s
ok  	testing/iotest	0.008s
ok  	testing/quick	0.068s
ok  	testing/slogtest	0.041s
ok  	text/scanner	0.017s
ok  	text/tabwriter	0.031s
ok  	text/template	0.073s
ok  	text/template/parse	0.025s
ok  	time	2.245s
ok  	unicode	0.012s
ok  	unicode/utf16	0.050s
ok  	unicode/utf8	0.037s
ok  	cmd/addr2line	1.150s
ok  	cmd/api	20.373s
ok  	cmd/asm/internal/asm	0.782s
ok  	cmd/asm/internal/lex	0.009s
ok  	cmd/cgo/internal/swig	0.020s
ok  	cmd/cgo/internal/test	0.869s
ok  	cmd/cgo/internal/testcarchive	0.003s
ok  	cmd/cgo/internal/testcshared	0.003s
ok  	cmd/cgo/internal/testerrors	16.729s
ok  	cmd/cgo/internal/testfortran	4.010s
ok  	cmd/cgo/internal/testgodefs	0.942s
ok  	cmd/cgo/internal/testlife	0.995s
ok  	cmd/cgo/internal/testnocgo	0.002s
ok  	cmd/cgo/internal/testplugin	0.003s
ok  	cmd/cgo/internal/testsanitizers	21.685s
ok  	cmd/cgo/internal/testshared	0.004s
ok  	cmd/cgo/internal/testso	2.475s
ok  	cmd/cgo/internal/teststdio	2.510s
ok  	cmd/cgo/internal/testtls	0.003s
ok  	cmd/compile/internal/abt	0.009s
ok  	cmd/compile/internal/amd64	3.574s
ok  	cmd/compile/internal/base	0.003s
ok  	cmd/compile/internal/compare	0.003s
ok  	cmd/compile/internal/devirtualize	0.003s
ok  	cmd/compile/internal/dwarfgen	0.284s
ok  	cmd/compile/internal/importer	1.803s
ok  	cmd/compile/internal/inline/inlheur	0.778s
ok  	cmd/compile/internal/ir	0.003s
ok  	cmd/compile/internal/logopt	0.642s
ok  	cmd/compile/internal/loopvar	46.095s
ok  	cmd/compile/internal/noder	0.007s
ok  	cmd/compile/internal/reflectdata	0.004s [no tests to run]
ok  	cmd/compile/internal/ssa	34.664s
ok  	cmd/compile/internal/syntax	0.084s
ok  	cmd/compile/internal/test	15.274s
ok  	cmd/compile/internal/typecheck	1.184s
ok  	cmd/compile/internal/types	0.003s
ok  	cmd/compile/internal/types2	14.010s
ok  	cmd/covdata	0.009s
ok  	cmd/cover	2.793s
ok  	cmd/dist	0.008s
ok  	cmd/distpack	0.005s
ok  	cmd/doc	0.304s
ok  	cmd/fix	1.642s
ok  	cmd/go	25.852s
ok  	cmd/go/internal/auth	0.006s
ok  	cmd/go/internal/cache	0.223s
ok  	cmd/go/internal/cfg	0.010s [no tests to run]
ok  	cmd/go/internal/envcmd	0.053s
ok  	cmd/go/internal/fsys	0.083s
ok  	cmd/go/internal/generate	0.012s
ok  	cmd/go/internal/gover	0.005s
ok  	cmd/go/internal/imports	0.014s
ok  	cmd/go/internal/load	0.009s
ok  	cmd/go/internal/lockedfile	0.124s
ok  	cmd/go/internal/lockedfile/internal/filelock	0.047s
ok  	cmd/go/internal/modfetch	0.015s
ok  	cmd/go/internal/modfetch/codehost	2.588s
ok  	cmd/go/internal/modfetch/zip_sum_test	0.011s
ok  	cmd/go/internal/modindex	0.365s
ok  	cmd/go/internal/modload	0.010s
ok  	cmd/go/internal/mvs	0.022s
ok  	cmd/go/internal/par	0.030s
ok  	cmd/go/internal/str	0.010s
ok  	cmd/go/internal/test	0.040s
ok  	cmd/go/internal/toolchain	0.013s
ok  	cmd/go/internal/vcs	0.013s
ok  	cmd/go/internal/vcweb	0.016s
ok  	cmd/go/internal/vcweb/vcstest	16.956s
ok  	cmd/go/internal/web	0.013s
ok  	cmd/go/internal/work	0.193s
ok  	cmd/gofmt	0.086s
ok  	cmd/internal/archive	1.841s
ok  	cmd/internal/bootstrap_test	0.086s
ok  	cmd/internal/buildid	0.683s
ok  	cmd/internal/cov	1.492s
ok  	cmd/internal/dwarf	0.094s
ok  	cmd/internal/edit	0.086s
ok  	cmd/internal/goobj	0.086s
ok  	cmd/internal/moddeps	3.061s
ok  	cmd/internal/notsha256	0.082s
ok  	cmd/internal/obj	1.758s
ok  	cmd/internal/obj/ppc64	0.792s
ok  	cmd/internal/obj/riscv	0.288s
ok  	cmd/internal/obj/s390x	0.086s
ok  	cmd/internal/obj/x86	1.419s
ok  	cmd/internal/objabi	0.229s
ok  	cmd/internal/pkgpath	0.198s
ok  	cmd/internal/pkgpattern	0.044s
ok  	cmd/internal/quoted	0.041s
ok  	cmd/internal/src	0.040s
ok  	cmd/internal/test2json	0.511s
ok  	cmd/link	8.353s
ok  	cmd/link/internal/benchmark	0.041s
ok  	cmd/link/internal/ld	8.124s
ok  	cmd/link/internal/loader	0.013s
ok  	cmd/nm	3.725s
ok  	cmd/objdump	3.927s
ok  	cmd/pack	1.894s
ok  	cmd/pprof	2.348s
ok  	cmd/trace	0.010s
ok  	cmd/trace/v2	0.148s
ok  	cmd/vet	4.912s

##### os/user with tag osusergo
ok  	os/user	0.006s

##### hash/maphash purego implementation
ok  	hash/maphash	0.079s

##### GOMAXPROCS=2 runtime -cpu=1,2,4 -quick
ok  	runtime	32.710s

##### GOEXPERIMENT=rangefunc go test iter
ok  	iter	0.003s

##### Testing without libgcc.
ok  	net	0.011s
ok  	os/user	0.006s

##### internal linking of -buildmode=pie
ok  	reflect	0.207s
ok  	os/user	0.004s

##### sync -cpu=10
ok  	sync	0.341s

##### Testing race detector
ok  	runtime/race	6.207s
ok  	flag	1.028s
ok  	net	1.174s
ok  	os	1.138s
ok  	os/exec	2.062s
ok  	encoding/gob	1.065s
ok  	flag	1.026s
ok  	os/exec	2.048s

##### Testing cgo
ok  	cmd/cgo/internal/test	0.776s
ok  	cmd/cgo/internal/test	0.787s
ok  	cmd/cgo/internal/testtls	0.003s
ok  	cmd/cgo/internal/testtls	0.003s
ok  	cmd/cgo/internal/testnocgo	0.004s
ok  	cmd/cgo/internal/testnocgo	0.003s
ok  	cmd/cgo/internal/test	0.788s
ok  	cmd/cgo/internal/test	0.789s
ok  	cmd/cgo/internal/test	0.795s
ok  	cmd/cgo/internal/test	0.781s
ok  	cmd/cgo/internal/testtls	0.005s
ok  	cmd/cgo/internal/testnocgo	0.004s

##### ../test
ok  	cmd/internal/testdir	51.588s

##### API check
ok  	cmd/api	43.612s

ALL TESTS PASSED
---
Installed Go for linux/amd64 in /home/olej/goroot
Installed commands in /home/olej/goroot/bin
*** You need to add /home/olej/goroot/bin to your PATH.

real	6m41,257s
user	62m49,238s
sys	10m54,637s

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

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

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

Olej писал(а):
09 фев 2024, 17:02
real 6m41,257s
Сборка идёт о-о-о-очень интенсивно...
Вот, в один из моментов, скрин загрузки:
Снимок экрана от 2024-02-09 15-55-20.png
Снимок экрана от 2024-02-09 15-55-20.png (235.6 КБ) 163 просмотра
40 процессоров имеют загрузку стремящуюсь к 100%
А вот хронология (некоторая) оценок загрузки ... и её нарастание по ходу:

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

olej@R420:~/goroot$ uptime
 15:53:55 up  5:55,  2 users,  load average: 8,86, 3,99, 2,36

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

olej@R420:~/goroot$ uptime
 15:54:15 up  5:55,  2 users,  load average: 11,38, 4,95, 2,72

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

olej@R420:~/goroot$ uptime
 15:54:54 up  5:56,  2 users,  load average: 17,34, 7,00, 3,48

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

olej@R420:~/goroot$ uptime
 15:55:11 up  5:56,  2 users,  load average: 20,34, 8,19, 3,93

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

olej@R420:~/goroot$ uptime
 15:55:39 up  5:57,  2 users,  load average: 32,36, 12,52, 5,52

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

olej@R420:~/goroot$ uptime
 15:58:09 up  5:59,  2 users,  load average: 44,86, 22,87, 10,43

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

olej@R420:~/goroot$ uptime
 15:58:15 up  5:59,  2 users,  load average: 43,99, 23,05, 10,55

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

olej@R420:~/goroot$ uptime
 15:58:25 up  5:59,  2 users,  load average: 37,99, 22,46, 10,49

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

olej@R420:~/goroot$ uptime
 15:58:58 up  6:00,  2 users,  load average: 27,36, 21,46, 10,55

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

olej@R420:~/goroot$ uptime
 15:59:19 up  6:00,  2 users,  load average: 19,09, 20,01, 10,36

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

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

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

Olej писал(а):
09 фев 2024, 17:02
real 6m41,257s
Но всё благополучно завершается:
Olej писал(а):
09 фев 2024, 17:02
ALL TESTS PASSED

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

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

Непрочитанное сообщение Olej » 10 фев 2024, 00:44

Olej писал(а):
07 фев 2024, 19:56
Golang 1.22 Release: Comprehensive Guide to New Features and Enhancements
Теперь к новинкам - Вышел Go 1.22.
Там есть, кроме улучшения работы внутренних механизмов, очень интересные вещи:
Основные изменения и доработки в выпуске Go 1.22:

- в циклы for добавлена поддержка определения диапазонов из целых чисел, например, для перебора значений с 0 до 9 теперь можно использовать цикл "for i := range 10 {...}";

- в циклы for добавлена экспериментальная (GOEXPERIMENT=rangefunc) поддержка функций определения диапазона, позволяющая указывать функцию в качестве итератора. Например, "for i, x := range slices.Backward(s) {...};

- решена давняя проблема с циклами "for", приводившая при вызове сопрограмм (goroutine) к совместному использованию переменных цикла в разных итерациях;

- проведена оптимизация работы с памятью в runtime, которая привела к повышению производительности на 1-3% и снижению потребления памяти в большинстве приложений на 1%;

- продолжена работа по задействованию в компиляторе оптимизаций на основе результатов профилирования кода (PGO — Profile-guided optimization), позволяющих учитывать особенности, определяемые во время выполнения программы. В новой версии в компиляторе задействованы средства девиртуализации для замены непрямых вызовов различных методов на выполнение развёрнутых inline-блоков. При включении PGO добавленное изменение позволило повысить производительность большинства программ на 2-14%;

- в компилятор добавлена экспериментальная (GOEXPERIMENT=newinliner) улучшенная реализация механизма развёртывания (inlining) вызовов, использующая эвристику для разделения важных и второстепенных операций;

- в стандартную библиотеку добавлен пакет math/rand/v2, в котором предложен более целостный API и задействованы более быстрые алгоритмы генерации псевдо-случайных чисел;

- в пакет net/http.ServeMux добавлена возможность указания методов и масок в шаблонах, например, шаблон "GET /static/{id}/" будет применён к запросам с HTTP-методом GET и сохранит значение второго сегмента запрошенного пути в идентификаторе id;

- в пакет database/sql добавлена поддержка типа Null[T], позволяющего сканировать столбцы, которые могут принимать значение NULL;

- в пакет slices добавлена функция Concat для слияния нескольких слайсов любого типа;

- в командах для работы с рабочими пространствами (коллекциями модулей) предоставлена возможность использования каталога vendor, содержащего зависимости к содержимому рабочего пространства. Каталог создаётся при выполнении команды go work vendor и используется в сборочных командах при выставлении опции "-mod=vendor" (включает по умолчанию при наличии каталога vendor).

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

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

Непрочитанное сообщение Olej » 10 фев 2024, 00:52

Olej писал(а):
10 фев 2024, 00:44
в циклы for добавлена поддержка определения диапазонов из целых чисел
На манер Python...

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

package main

func main() {
	for i := range 10 {
		print(i, " ")
	}
	println()
}

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

olej@R420:~/2024/own.BOOKs/BHV.Go.3/examples.work/compare/new.vers$ go run for.go
0 1 2 3 4 5 6 7 8 9
Вложения
for.go
(81 байт) 8 скачиваний

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

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

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

Olej писал(а):
10 фев 2024, 00:44
в циклы for добавлена экспериментальная (GOEXPERIMENT=rangefunc) поддержка функций определения диапазона, позволяющая указывать функцию в качестве итератора. Например, "for i, x := range slices.Backward(s) {...};

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

package main
import "github.com/go-board/std/slices"

func main() {
	arr := []int{1, 2, 3, 4, 5}
	for x := range slices.Backward(arr) {
		print(x, " ")
	}
	println()
}
Тут всё сложнее...

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

olej@R420:~/2024/own.BOOKs/BHV.Go.3/examples.work/compare/new.vers$ go build forit.go
forit.go:3:8: no required module provides package github.com/go-board/std/slices: go.mod file not found in current directory or any parent directory; see 'go help modules'
Понятно: у нас нет файла описания модуля.
У меня всё это кино в каталоге:

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

olej@R420:~/2024/own.BOOKs/BHV.Go.3/examples.work/compare/new.vers$ pwd
/home/olej/2024/own.BOOKs/BHV.Go.3/examples.work/compare/new.vers
Тогда пусть и модуль будет такой же:

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

olej@R420:~/2024/own.BOOKs/BHV.Go.3/examples.work/compare/new.vers$ go mod init new.vers
go: creating new go.mod: module new.vers
go: to add module requirements and sums:
    go mod tidy

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

olej@R420:~/2024/own.BOOKs/BHV.Go.3/examples.work/compare/new.vers$ cat go.mod
module new.vers

go 1.22.0
Сделал. Но компиляцию ещё делать рано:

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

olej@R420:~/2024/own.BOOKs/BHV.Go.3/examples.work/compare/new.vers$ go build forit.go
forit.go:6:8: no required module provides package github.com/go-board/std/slices; to add it:
    go get github.com/go-board/std/slices
Нужен импорт из сетевого репозитория:

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

olej@R420:~/2024/own.BOOKs/BHV.Go.3/examples.work/compare/new.vers$ go mod tidy
go: finding module for package github.com/go-board/std/slices
go: downloading github.com/go-board/std v0.6.0
go: found github.com/go-board/std/slices in github.com/go-board/std v0.6.0
go: downloading github.com/frankban/quicktest v1.14.6
go: downloading github.com/tidwall/btree v1.7.0
go: downloading github.com/kr/pretty v0.3.1
go: downloading github.com/google/go-cmp v0.5.9
go: downloading github.com/rogpeppe/go-internal v1.9.0
Стало так:

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

olej@R420:~/2024/own.BOOKs/BHV.Go.3/examples.work/compare/new.vers$ cat go.mod
module new.vers

go 1.22.0

require github.com/go-board/std v0.6.0

require github.com/tidwall/btree v1.7.0 // indirect
И из Интернет скачалось (импорт):

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

olej@R420:~/2024/own.BOOKs/BHV.Go.3/examples.work/compare/new.vers$ ls -o `go env GOPATH`/pkg/mod/github.com/go-board/
итого 4
dr-xr-xr-x 23 olej 4096 фев  9 20:29 std@v0.6.0

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

olej@R420:~/2024/own.BOOKs/BHV.Go.3/examples.work/compare/new.vers$ tree `go env GOPATH`/pkg/mod/github.com/go-board/std@v0.6.0
/home/olej/go/pkg/mod/github.com/go-board/std@v0.6.0
├── algorithm
│   └── dp
│       ├── dp.go
│       └── dp_test.go
├── CHANGELOG.md
├── clone
│   └── clone.go
├── cmp
│   ├── cmp_1_20.go
│   ├── cmp_1_21.go
│   ├── cmp.go
│   ├── cmp_test.go
│   └── impl.go
├── collections
│   ├── ordered
│   │   ├── map.go
│   │   └── set.go
│   ├── queue
│   │   ├── queue.go
│   │   └── queue_test.go
│   └── stack
│       ├── stack.go
│       └── stack_test.go
├── cond
│   └── ternary.go
├── core
│   ├── constraint.go
│   ├── core.go
│   └── core_test.go
├── fp
│   ├── compose.go
│   ├── fn1.go
│   ├── fn2.go
│   ├── fn3.go
│   ├── fn4.go
│   ├── fn5.go
│   ├── fp_test.go
│   └── state.go
├── go.mod
├── go.sum
├── hash
│   ├── hash.go
│   └── hash_test.go
├── iter
│   ├── collector
│   │   ├── collector.go
│   │   └── collector_test.go
│   ├── iter.go
│   ├── iter_test.go
│   ├── ops.go
│   ├── rangefunc.go
│   ├── rangefunc_test.go
│   └── source
│       ├── source.go
│       └── source_test.go
├── lazy
│   ├── lazy.go
│   ├── lazy_test.go
│   ├── once_1_21.go
│   └── once.go
├── LICENSE
├── maps
│   ├── maps_1_20.go
│   ├── maps_1_21.go
│   └── maps.go
├── operator
│   └── operator.go
├── optional
│   ├── optional.go
│   └── optional_test.go
├── ptr
│   └── ptr.go
├── README.md
├── result
│   ├── result.go
│   └── try
│       ├── try.go
│       └── try_test.go
├── service
│   └── service.go
├── sets
│   ├── set.go
│   └── set_test.go
├── slices
│   ├── example_test.go
│   ├── slice_1_20.go
│   ├── slice_1_21.go
│   ├── slice.go
│   └── slice_test.go
├── sync
│   ├── channel.go
│   └── sync.go
└── tuple
    └── tuple.go

27 directories, 67 files
Вот теперь всё готово для сборки...
Вложения
forit.go
(168 байт) 8 скачиваний

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

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

Непрочитанное сообщение Olej » 10 фев 2024, 01:05

Olej писал(а):
10 фев 2024, 01:01
Вот теперь всё готово для сборки...
Но и теперь номер просто так не проходит :!: :cry: :

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

olej@R420:~/2024/own.BOOKs/BHV.Go.3/examples.work/compare/new.vers$ go build forit.go
# command-line-arguments
./forit.go:14:20: cannot range over slices.Backward(arr) (value of type iter.Seq[int])
Вот так :!:
А проходит это так:

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

olej@R420:~/2024/own.BOOKs/BHV.Go.3/examples.work/compare/new.vers$ GOEXPERIMENT=rangefunc go build forit.go

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

olej@R420:~/2024/own.BOOKs/BHV.Go.3/examples.work/compare/new.vers$ ls -o forit 
-rwxrwxr-x 1 olej 1792609 фев  9 20:46 forit

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

olej@R420:~/2024/own.BOOKs/BHV.Go.3/examples.work/compare/new.vers$ ./forit
5 4 3 2 1

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

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

Непрочитанное сообщение Olej » 10 фев 2024, 01:07

Olej писал(а):
10 фев 2024, 00:44
- в циклы for добавлена экспериментальная (GOEXPERIMENT=rangefunc) поддержка функций определения диапазона, позволяющая указывать функцию в качестве итератора.
Но ... нужно ещё разобраться что они в Go понимают под "итератор".
Я знаю что такое итераторы в C++ (STL) и Python ... но как-то не припомню специфики Go.

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

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

Непрочитанное сообщение Olej » 10 фев 2024, 02:57

Olej писал(а):
10 фев 2024, 00:44
- решена давняя проблема с циклами "for", приводившая при вызове сопрограмм (goroutine) к совместному использованию переменных цикла в разных итерациях;
Это хорошо и давно известная в Go проблема:
- при запуске в цикле for горутин, которые используют переменную этого цикла - происходит сбой...
- чаще всего при создании функцональных замыканий ... в зависимости от времени определения и времени использования переменных...
- это объяснять трудно - легче показать на примере, что сейчас и будет сделано...
- но если попасться случайно на ошибку этого рода, то квалифицировать её будет крайне сложно :evil:
Но чтобы продемонстрировать ошибку мне нужно вернуться к предыдущей версии Go...

P.S. "хорошо известная" - читаем здесь: What happens with closures running as goroutines? :!:

Ответить

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

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

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