diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 07acaf7..a623d0b 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -19,7 +19,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v3
with:
- go-version: ~1.19
+ go-version: ~1.22
- name: Check out code
uses: actions/checkout@v3
@@ -27,7 +27,7 @@ jobs:
- name: Linters
uses: golangci/golangci-lint-action@v3
with:
- version: v1.50.1
+ version: v1.57.2
working-directory: ${{ env.BRANCH }}
tests:
@@ -40,7 +40,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v3
with:
- go-version: ^1.19
+ go-version: ^1.22
- name: Check out code
uses: actions/checkout@v3
@@ -67,7 +67,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v3
with:
- go-version: ^1.19
+ go-version: ^1.22
- name: Check out code
uses: actions/checkout@v3
diff --git a/.golangci.yml b/.golangci.yml
index bc3e9f5..d38eca5 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -8,21 +8,6 @@ linters-settings:
funlen:
lines: 150
statements: 80
- depguard:
- rules:
- main:
- list-mode: lax
- files:
- - $all
- - "!$test"
- allow:
- - $gostd
- test:
- files:
- - "$test"
- allow:
- - $gostd
- - "github.com/stretchr/testify/require"
issues:
exclude-rules:
@@ -37,10 +22,10 @@ linters:
disable-all: true
enable:
- asciicheck
- - bodyclose
- depguard
- dogsled
- dupl
+ - bodyclose
- durationcheck
- errorlint
- exhaustive
diff --git a/README.md b/README.md
index 4b28d43..75815ab 100644
--- a/README.md
+++ b/README.md
@@ -20,10 +20,10 @@
[Инструкция по сдаче ДЗ](https://github.com/OtusGolang/home_work/wiki#%D0%A1%D1%82%D1%83%D0%B4%D0%B5%D0%BD%D1%82%D0%B0%D0%BC).
---
-Используемая версия [golangci-lint](https://golangci-lint.run/usage/install/#other-ci): v1.50.1
+Используемая версия [golangci-lint](https://golangci-lint.run/usage/install/#other-ci): v1.57.2
```
$ golangci-lint version
-golangci-lint has version 1.50.1 built from 8926a95 on 2022-10-22T10:48:48Z
+golangci-lint has version 1.57.2 built with go1.22.1 from 77a8601a on 2024-03-28T19:01:11Z
```
---
diff --git a/hw01_hello_otus/README.md b/hw01_hello_otus/README.md
index 4f77f24..25c783e 100644
--- a/hw01_hello_otus/README.md
+++ b/hw01_hello_otus/README.md
@@ -6,14 +6,14 @@ Hello, OTUS!
```
Для переворота строки следует воспользоваться возможностями
-[golang.org/x/example/stringutil](https://pkg.go.dev/golang.org/x/example/stringutil).
+[golang.org/x/example/hello/reverse](https://pkg.go.dev/golang.org/x/example/hello/reverse).
Кроме этого необходимо исправить **go.mod** так, чтобы для данного модуля работала
команда `go get`, а полученный **go.sum** закоммитить.
### Критерии оценки
- Пайплайн зелёный - 4 балла
-- Используется `stringutil` - 4 балла
+- Используется `reverse` - 4 балла
- Понятность и чистота кода - до 2 баллов
#### Зачёт от 7 баллов
diff --git a/hw01_hello_otus/go.mod b/hw01_hello_otus/go.mod
index de45ce0..b9597d7 100644
--- a/hw01_hello_otus/go.mod
+++ b/hw01_hello_otus/go.mod
@@ -1,5 +1,5 @@
module github.com/DimVlas/otus_hw/hw01_hello_otus
-go 1.19
+go 1.22
require golang.org/x/example v0.0.0-20230731131755-00c7068f9d83
diff --git a/hw02_unpack_string/go.mod b/hw02_unpack_string/go.mod
index 4111e10..6241841 100644
--- a/hw02_unpack_string/go.mod
+++ b/hw02_unpack_string/go.mod
@@ -1,6 +1,6 @@
module github.com/DimVlas/otus_hw/hw02_unpack_string
-go 1.19
+go 1.22
require github.com/stretchr/testify v1.7.0
diff --git a/hw03_frequency_analysis/go.mod b/hw03_frequency_analysis/go.mod
index b67c12d..e8fad58 100644
--- a/hw03_frequency_analysis/go.mod
+++ b/hw03_frequency_analysis/go.mod
@@ -1,6 +1,6 @@
module github.com/DimVlas/otus_hw/hw03_frequency_analysis
-go 1.19
+go 1.22
require github.com/stretchr/testify v1.7.0
diff --git a/hw04_lru_cache/go.mod b/hw04_lru_cache/go.mod
index 747fc7c..36333ca 100644
--- a/hw04_lru_cache/go.mod
+++ b/hw04_lru_cache/go.mod
@@ -1,6 +1,6 @@
-module github.com/fixme_my_friend/hw04_lru_cache
+module github.com/DimVlas/otus_hw/hw04_lru_cache
-go 1.19
+go 1.22
require github.com/stretchr/testify v1.7.0
diff --git a/hw04_lru_cache/list.go b/hw04_lru_cache/list.go
index aa6ebcf..928ebb5 100644
--- a/hw04_lru_cache/list.go
+++ b/hw04_lru_cache/list.go
@@ -1,131 +1,26 @@
package hw04lrucache
type List interface {
- Len() int // Кол-во элементов в списке.
- Front() *ListItem // Первый элемент списка.
- Back() *ListItem // Последний элемент списка.
- PushFront(v interface{}) *ListItem // Добавление элемента в начало списка.
- PushBack(v interface{}) *ListItem // Добавление элемента в конец списка.
- Remove(i *ListItem) // Удаление элемента из списка.
- MoveToFront(i *ListItem) // Переместить элемент вперед.
+ Len() int
+ Front() *ListItem
+ Back() *ListItem
+ PushFront(v interface{}) *ListItem
+ PushBack(v interface{}) *ListItem
+ Remove(i *ListItem)
+ MoveToFront(i *ListItem)
}
type ListItem struct {
Value interface{}
- Prev *ListItem
Next *ListItem
+ Prev *ListItem
}
type list struct {
- len int
- front *ListItem
- back *ListItem
+ List // Remove me after realization.
+ // Place your code here.
}
-// Создать новый двусвязный список.
func NewList() List {
return new(list)
}
-
-// Кол-во элементов в списке.
-func (lst *list) Len() int {
- return lst.len
-}
-
-// Первый элемент списка.
-func (lst *list) Front() *ListItem {
- return lst.front
-}
-
-// Последний элемент списка.
-func (lst *list) Back() *ListItem {
- return lst.back
-}
-
-// Добавление элемента в начало списка.
-func (lst *list) PushFront(v interface{}) *ListItem {
- itm := &ListItem{
- Value: v,
- Next: lst.front,
- }
- lst.front = itm
- lst.len++
-
- if itm.Next == nil {
- lst.back = itm
- return itm
- }
-
- itm.Next.Prev = itm
- return itm
-}
-
-// Добавление элемента в конец списка.
-func (lst *list) PushBack(v interface{}) *ListItem {
- itm := &ListItem{
- Value: v,
- Prev: lst.back,
- }
- lst.back = itm
- lst.len++
-
- if itm.Prev == nil {
- lst.front = itm
- return itm
- }
-
- itm.Prev.Next = itm
- return itm
-}
-
-// Удаление элемента из списка.
-func (lst *list) Remove(i *ListItem) {
- if i == nil {
- return
- }
-
- if i.Prev == nil && i.Next == nil { // единственный элемент
- lst.front = nil
- lst.back = nil
- lst.len--
- return
- }
-
- if i.Prev == nil { // первый элемент
- i.Next.Prev = nil
- lst.front = i.Next
- lst.len--
- return
- }
-
- if i.Next == nil { // последний элемент
- i.Prev.Next = nil
- lst.back = i.Prev
- lst.len--
- return
- }
-
- i.Prev.Next = i.Next
- i.Next.Prev = i.Prev
- lst.len--
-}
-
-// Переместить элемент вперед.
-func (lst *list) MoveToFront(i *ListItem) {
- if i.Prev == nil { // первый элемент
- return
- }
-
- if i.Next != nil { // элемент из середины
- i.Prev.Next = i.Next // предыдущий ссылается на следующий
- i.Next.Prev = i.Prev // следующий ссылается на предыдущий
- } else { // последний элемент
- i.Prev.Next = nil
- lst.back = i.Prev
- }
-
- i.Prev = nil
- i.Next = lst.front
- lst.front = i
- i.Next.Prev = i
-}
diff --git a/hw05_parallel_execution/go.mod b/hw05_parallel_execution/go.mod
index 6fe7b42..458744b 100644
--- a/hw05_parallel_execution/go.mod
+++ b/hw05_parallel_execution/go.mod
@@ -1,6 +1,6 @@
module github.com/DimVlas/otus_hw/hw05_parallel_execution
-go 1.19
+go 1.22
require (
github.com/stretchr/testify v1.7.0
diff --git a/hw06_pipeline_execution/README.md b/hw06_pipeline_execution/README.md
index a03b0e4..c6ba9d8 100644
--- a/hw06_pipeline_execution/README.md
+++ b/hw06_pipeline_execution/README.md
@@ -28,7 +28,8 @@ func Stage(in <-chan interface{}) (out <-chan interface{}) {
### Критерии оценки
- CI-пайплайн зелёный - 5 баллов
- Добавлены новые юнит-тесты - до 2 баллов
-- Понятность и чистота кода - до 3 баллов
+- Проходит тест TestAllStageStop - 2 балла
+- Понятность и чистота кода - до 1 баллов
#### Зачёт от 7 баллов
diff --git a/hw06_pipeline_execution/go.mod b/hw06_pipeline_execution/go.mod
index d89f80c..ec11aba 100644
--- a/hw06_pipeline_execution/go.mod
+++ b/hw06_pipeline_execution/go.mod
@@ -1,6 +1,6 @@
module github.com/DimVlas/otus_hw/hw06_pipeline_execution
-go 1.19
+go 1.22
require github.com/stretchr/testify v1.7.0
diff --git a/hw06_pipeline_execution/pipeline_test.go b/hw06_pipeline_execution/pipeline_test.go
index 63c3a59..3f787c9 100644
--- a/hw06_pipeline_execution/pipeline_test.go
+++ b/hw06_pipeline_execution/pipeline_test.go
@@ -2,6 +2,7 @@ package hw06pipelineexecution
import (
"strconv"
+ "sync"
"testing"
"time"
@@ -13,6 +14,8 @@ const (
fault = sleepPerStage / 2
)
+var isFullTesting = true
+
func TestPipeline(t *testing.T) {
// Stage generator
g := func(_ string, f func(v interface{}) interface{}) Stage {
@@ -136,6 +139,65 @@ func TestPipeline(t *testing.T) {
})
}
+func TestAllStageStop(t *testing.T) {
+ if !isFullTesting {
+ return
+ }
+ wg := sync.WaitGroup{}
+ // Stage generator
+ g := func(_ string, f func(v interface{}) interface{}) Stage {
+ return func(in In) Out {
+ out := make(Bi)
+ wg.Add(1)
+ go func() {
+ defer wg.Done()
+ defer close(out)
+ for v := range in {
+ time.Sleep(sleepPerStage)
+ out <- f(v)
+ }
+ }()
+ return out
+ }
+ }
+
+ stages := []Stage{
+ g("Dummy", func(v interface{}) interface{} { return v }),
+ g("Multiplier (* 2)", func(v interface{}) interface{} { return v.(int) * 2 }),
+ g("Adder (+ 100)", func(v interface{}) interface{} { return v.(int) + 100 }),
+ g("Stringifier", func(v interface{}) interface{} { return strconv.Itoa(v.(int)) }),
+ }
+
+ t.Run("done case", func(t *testing.T) {
+ in := make(Bi)
+ done := make(Bi)
+ data := []int{1, 2, 3, 4, 5}
+
+ // Abort after 200ms
+ abortDur := sleepPerStage * 2
+ go func() {
+ <-time.After(abortDur)
+ close(done)
+ }()
+
+ go func() {
+ for _, v := range data {
+ in <- v
+ }
+ close(in)
+ }()
+
+ result := make([]string, 0, 10)
+ for s := range ExecutePipeline(in, done, stages...) {
+ result = append(result, s.(string))
+ }
+ wg.Wait()
+
+ require.Len(t, result, 0)
+
+ })
+}
+
func TestChanWrap(t *testing.T) {
t.Run("To end", func(t *testing.T) {
in := make(Bi)
diff --git a/hw07_file_copying/go.mod b/hw07_file_copying/go.mod
index 706acf0..8714ffa 100644
--- a/hw07_file_copying/go.mod
+++ b/hw07_file_copying/go.mod
@@ -1,6 +1,6 @@
module github.com/DimVlas/otus_hw/hw07_file_copying
-go 1.19
+go 1.22
require github.com/stretchr/testify v1.9.0
diff --git a/hw07_file_copying/go.sum b/hw07_file_copying/go.sum
index 60ce688..e69de29 100644
--- a/hw07_file_copying/go.sum
+++ b/hw07_file_copying/go.sum
@@ -1,10 +0,0 @@
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
-github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/hw08_envdir_tool/go.mod b/hw08_envdir_tool/go.mod
index f77cbf1..8526e55 100644
--- a/hw08_envdir_tool/go.mod
+++ b/hw08_envdir_tool/go.mod
@@ -1,6 +1,6 @@
module github.com/DimVlas/otus_hw/hw08_envdir_tool
-go 1.19
+go 1.22
require github.com/stretchr/testify v1.9.0
@@ -8,4 +8,4 @@ require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
-)
+)
\ No newline at end of file
diff --git a/hw09_struct_validator/go.mod b/hw09_struct_validator/go.mod
index 30d53c8..6699458 100644
--- a/hw09_struct_validator/go.mod
+++ b/hw09_struct_validator/go.mod
@@ -1,3 +1,3 @@
module github.com/fixme_my_friend/hw09_struct_validator
-go 1.19
+go 1.22
diff --git a/hw10_program_optimization/go.mod b/hw10_program_optimization/go.mod
index a11e9a2..8bccd17 100644
--- a/hw10_program_optimization/go.mod
+++ b/hw10_program_optimization/go.mod
@@ -1,6 +1,6 @@
module github.com/fixme_my_friend/hw10_program_optimization
-go 1.19
+go 1.22
require github.com/stretchr/testify v1.7.0
diff --git a/hw11_telnet_client/go.mod b/hw11_telnet_client/go.mod
index 4fc5708..839d5b8 100644
--- a/hw11_telnet_client/go.mod
+++ b/hw11_telnet_client/go.mod
@@ -1,6 +1,6 @@
module github.com/fixme_my_friend/hw11_telnet_client
-go 1.19
+go 1.22
require github.com/stretchr/testify v1.7.0
diff --git a/hw12_13_14_15_calendar/Makefile b/hw12_13_14_15_calendar/Makefile
index c590ddc..9d3c317 100644
--- a/hw12_13_14_15_calendar/Makefile
+++ b/hw12_13_14_15_calendar/Makefile
@@ -26,7 +26,7 @@ test:
go test -race ./internal/... ./pkg/...
install-lint-deps:
- (which golangci-lint > /dev/null) || curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(shell go env GOPATH)/bin v1.50.1
+ (which golangci-lint > /dev/null) || curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(shell go env GOPATH)/bin v1.57.2
lint: install-lint-deps
golangci-lint run ./...
diff --git a/hw12_13_14_15_calendar/build/Dockerfile b/hw12_13_14_15_calendar/build/Dockerfile
index a7c863a..3c6fa2a 100644
--- a/hw12_13_14_15_calendar/build/Dockerfile
+++ b/hw12_13_14_15_calendar/build/Dockerfile
@@ -1,5 +1,5 @@
# Собираем в гошке
-FROM golang:1.19 as build
+FROM golang:1.22 as build
ENV BIN_FILE /opt/calendar/calendar-app
ENV CODE_DIR /go/src/
diff --git a/hw12_13_14_15_calendar/go.mod b/hw12_13_14_15_calendar/go.mod
index 01528d4..4be1765 100644
--- a/hw12_13_14_15_calendar/go.mod
+++ b/hw12_13_14_15_calendar/go.mod
@@ -1,3 +1,3 @@
module github.com/fixme_my_friend/hw12_13_14_15_calendar
-go 1.19
+go 1.22