Skip to content

Commit 09468e5

Browse files
committed
Примеры 8-12
1 parent 2d8737c commit 09468e5

File tree

55 files changed

+1769
-43
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+1769
-43
lines changed

Diff for: 05-io/1-net_io/net_io.go

+7-2
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,24 @@ func main() {
2424
if err != nil {
2525
log.Fatal(err)
2626
}
27+
2728
// Подключения обрабатываются в бесконечном цикле.
2829
// Иначе после обслуживания первого подключения сервер
29-
//завершит работу.
30+
// завершит работу.
3031
for {
3132
// Принимаем подключение.
3233
conn, err := listener.Accept()
3334
if err != nil {
3435
log.Fatal(err)
3536
}
3637
// Вызов обработчика подключения.
37-
go handleConn(conn)
38+
handleConn(conn)
3839
}
3940
}
4041

4142
// Обработчик. Вызывается для каждого соединения.
4243
func handleConn(conn net.Conn) {
44+
4345
// Чтение сообщения от клиента.
4446
var req []byte
4547
var buf = make([]byte, 2)
@@ -61,9 +63,11 @@ func handleConn(conn net.Conn) {
6163
break
6264
}
6365
}
66+
6467
// Удаление символов конца строки.
6568
msg := strings.TrimSuffix(string(req), "\n")
6669
msg = strings.TrimSuffix(msg, "\r")
70+
6771
// Если получили "time" - пишем время в соединение.
6872
if msg == "time" {
6973
n, err := conn.Write([]byte(time.Now().String() + "\n"))
@@ -73,6 +77,7 @@ func handleConn(conn net.Conn) {
7377
}
7478
log.Printf("клиенту отправлено %d байт", n)
7579
}
80+
7681
// Закрытие соединения.
7782
conn.Close()
7883
}

Diff for: 05-io/2-reader_writer/reader_writer.go

+4-12
Original file line numberDiff line numberDiff line change
@@ -17,26 +17,16 @@ func main() {
1717
log.Fatal(err)
1818
}
1919
f.Close()
20+
2021
f, err = os.Create("./reader_writer_copy.go")
2122
if err != nil {
2223
log.Fatal(err)
2324
}
24-
2525
err = store(f, b)
2626
if err != nil {
2727
log.Fatal(err)
2828
}
2929
f.Close()
30-
31-
// Тот же самый код работает с калвиатурой.
32-
/*b, err = get(os.Stdin)
33-
if err != nil {
34-
log.Fatal(err)
35-
}
36-
err = store(os.Stdout, b)
37-
if err != nil {
38-
log.Fatal(err)
39-
}*/
4030
}
4131

4232
func store(w io.Writer, b []byte) error {
@@ -48,6 +38,8 @@ func store(w io.Writer, b []byte) error {
4838
}
4939

5040
func get(r io.Reader) ([]byte, error) {
41+
return io.ReadAll(r)
42+
/*/
5143
var b []byte
5244
var buf = make([]byte, 10)
5345
for {
@@ -62,5 +54,5 @@ func get(r io.Reader) ([]byte, error) {
6254
b = append(b, buf...)
6355
}
6456
// Здесь какая-то логика.
65-
return b, nil
57+
return b, nil*/
6658
}

Diff for: 05-io/4-files/files.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@ func main() {
3030
log.Fatal(err)
3131
}
3232
defer file.Close()
33+
3334
// что здесь не правильно?
34-
buf := make([]byte, 4)
35+
buf := make([]byte, 6)
3536
n, err := file.Read(buf)
3637
if err != nil {
3738
log.Fatal(err)

Diff for: 05-io/5-input/input.go

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ func main() {
1919
}
2020
fmt.Println("echo:", text)
2121
}
22+
2223
scanner := bufio.NewScanner(os.Stdin)
2324
fmt.Print("NewScanner-> ")
2425
for scanner.Scan() {
@@ -28,6 +29,7 @@ func main() {
2829
fmt.Println(scanner.Text())
2930
fmt.Print("NewScanner-> ")
3031
}
32+
3133
for {
3234
fmt.Print("fmt.Scanln-> ")
3335
var s string

Diff for: 05-io/6-flags/flags.go

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ func main() {
1010
var n int
1111
flag.IntVar(&n, "n", 10, "количество")
1212
flag.IntVar(&n, "number", 10, "количество")
13+
1314
flag.Parse()
15+
1416
fmt.Println(*s, n)
1517
}

Diff for: 06-oop/1-methods/methods.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,22 @@ type Course struct {
1010
}
1111

1212
// SetAuthor устанавливает имя автора.
13-
func (c *Course) SetAuthor(name string) {
13+
func (c Course) SetAuthor(name string) {
1414
c.author = name
1515
}
1616

1717
// Author возвращает имя атора курса.
18-
func (c *Course) Author() string {
18+
func (c Course) Author() string {
1919
return c.author
2020
}
2121

2222
func main() {
2323
c := new(Course) // new создаёт переменную и возвращает указатель на неё
24-
c.SetAuthor("Дмитрий Титов")
24+
c.SetAuthor("1")
2525
fmt.Println(c.Author())
26+
2627
var course Course
27-
course.SetAuthor("Alan A. Donovan")
28+
course.SetAuthor("2")
2829
fmt.Println(course.Author()) // Что будет выведено здесь?
2930

3031
// The rule about pointers vs. values for receivers is that value methods

Diff for: 06-oop/2-ifaces/ifaces.go renamed to 06-oop/2-dip/ifaces.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@ type CustomLogger struct {
2929
}
3030

3131
// MemLogger - заглушка журнала в памяти для тестов.
32-
type MemLogger int
32+
type MemLogger struct{}
3333

3434
// Log ничего не делает. Обратите внимание на отсутствие имён у получателя и аргумента.
3535
func (*MemLogger) Log(string) error {
3636
return nil
3737
}
3838

3939
func main() {
40-
l := new(DBLogger)
40+
l := new(CustomLogger)
4141
err := logMsg(l, "сообщение")
4242
if err != nil {
4343
log.Println(err)
@@ -47,6 +47,7 @@ func main() {
4747

4848
// logMsg записывает сообщение в журнал
4949
func logMsg(l Logger, msg string) error {
50+
// CODE
5051
err := l.Log(msg)
5152
return err
5253
}
File renamed without changes.

Diff for: 06-oop/3-embedding/embedding.go

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package main
22

33
import (
4-
"flag"
54
"fmt"
65
)
76

@@ -15,6 +14,10 @@ type processor struct {
1514
cores int
1615
}
1716

17+
func (c *computer) cpuinfo() string {
18+
return fmt.Sprintf("computer cpuinfo()")
19+
}
20+
1821
func (p *processor) cpuinfo() string {
1922
return fmt.Sprintf("%s, %d ядер", p.model, p.cores)
2023
}
@@ -24,13 +27,13 @@ func (c *computer) String() string {
2427
}
2528

2629
func main() {
27-
flag.StringVar()
28-
c := &computer{
30+
comp := &computer{
2931
model: "Компьютер игровой",
3032
processor: processor{
3133
model: "Байкал",
3234
cores: 8,
3335
},
3436
}
35-
fmt.Println(c.cpuinfo())
37+
38+
fmt.Println(comp.cpuinfo())
3639
}

Diff for: 06-oop/4-constructor/constructor.go

+4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88
type Guitar struct {
99
manufacturer string
1010
model string
11+
12+
ch chan int
1113
}
1214

1315
// New - конструктор.
@@ -16,6 +18,8 @@ func New(manufacturer, model string) *Guitar {
1618
manufacturer: manufacturer, // имена совпадают
1719
model: model, // но это не проблема
1820
}
21+
g.ch = make(chan int)
22+
1923
return &g // явно указываем, что возвращается ссылка
2024
}
2125

Diff for: 07-testing/1-simple/simple_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ func Test_sum(t *testing.T) {
1212
if got != want { // сравнение результата с правильным значением
1313
t.Errorf("получили %d, ожидалось %d", got, want)
1414
}
15+
t.Log("ABC")
1516
}
1617

1718
// === RUN Test_sum

Diff for: 07-testing/4-refactoring/refactoring.go

+1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ func rates() (Rates, error) {
4545
if err != nil {
4646
return Rates{}, err
4747
}
48+
4849
return data, nil
4950
}
5051

Diff for: 07-testing/5-db/db.go

+15
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,21 @@ type Product struct {
66
}
77

88
func Products() ([]Product, error) {
9+
10+
i := 4
11+
_ = i
12+
13+
s := "ABC"
14+
_ = s
15+
16+
p := Product{
17+
Name: "A",
18+
}
19+
_ = p
20+
21+
var m map[string]bool = map[string]bool{"s": true}
22+
_ = m
23+
924
data := []Product{
1025
{
1126
Name: "Пепелац",

Diff for: 07-testing/5-db/db_test.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
package db
22

3-
import "testing"
3+
import (
4+
"testing"
5+
)
46

57
func TestProductCRUD(t *testing.T) {
8+
if !testing.Short() {
9+
t.Skip()
10+
}
611

712
var item = Product{
813
Name: "Пепелац",

Diff for: 07-testing/6-handler/handler.go

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ func (api API) ProductsHandler(w http.ResponseWriter, r *http.Request) {
2222
Price: 1000,
2323
},
2424
}
25+
2526
err := json.NewEncoder(w).Encode(data)
2627
if err != nil {
2728
http.Error(w, err.Error(), http.StatusInternalServerError)

Diff for: 08-prof_debug/1-bench_profile/cpu.pdf

92.3 KB
Binary file not shown.

Diff for: 08-prof_debug/1-bench_profile/cpu.svg

160 KB
Loading

Diff for: 08-prof_debug/1-bench_profile/search.go

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package bsearch
2+
3+
// Binary возвращает номер элемента в массиве или -1. Используется бинарный поиск.
4+
func Binary(data []int, item int) int {
5+
low, high := 0, len(data)-1
6+
for low <= high {
7+
mid := (low + high) / 2
8+
if data[mid] == item {
9+
return mid
10+
}
11+
if data[mid] < item {
12+
low = mid + 1
13+
} else {
14+
high = mid - 1
15+
}
16+
}
17+
return -1
18+
}
19+
20+
// Simple возвращает номер элемента в массиве или -1. Используется простой поиск.
21+
func Simple(data []int, item int) int {
22+
for i := range data {
23+
if data[i] == item {
24+
return i
25+
}
26+
}
27+
return -1
28+
}

0 commit comments

Comments
 (0)