Skip to content

Commit b37e4ab

Browse files
author
teivah
committed
All
1 parent 8e2f2cb commit b37e4ab

File tree

154 files changed

+5466
-1000362
lines changed

Some content is hidden

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

154 files changed

+5466
-1000362
lines changed

Diff for: 10-standard-lib/75-wrong-time-duration/main.go

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package main
2+
3+
import "time"
4+
5+
func listing1() {
6+
ticker := time.NewTicker(1000)
7+
for {
8+
select {
9+
case <-ticker.C:
10+
// Do something
11+
}
12+
}
13+
}
14+
15+
func listing2() {
16+
ticker := time.NewTicker(time.Microsecond)
17+
for {
18+
select {
19+
case <-ticker.C:
20+
// Do something
21+
}
22+
}
23+
}

Diff for: 10-standard-lib/76-time-after/main.go

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package main
2+
3+
import (
4+
"context"
5+
"log"
6+
"time"
7+
)
8+
9+
func consumer1(ch <-chan Event) {
10+
for {
11+
select {
12+
case event := <-ch:
13+
handle(event)
14+
case <-time.After(time.Hour):
15+
log.Println("warning: no messages received")
16+
}
17+
}
18+
}
19+
20+
func consumer2(ch <-chan Event) {
21+
for {
22+
ctx, cancel := context.WithTimeout(context.Background(), time.Hour)
23+
select {
24+
case event := <-ch:
25+
cancel()
26+
handle(event)
27+
case <-ctx.Done():
28+
log.Println("warning: no messages received")
29+
}
30+
}
31+
}
32+
33+
func consumer3(ch <-chan Event) {
34+
timerDuration := 1 * time.Hour
35+
timer := time.NewTimer(timerDuration)
36+
37+
for {
38+
timer.Reset(timerDuration)
39+
select {
40+
case event := <-ch:
41+
handle(event)
42+
case <-timer.C:
43+
log.Println("warning: no messages received")
44+
}
45+
}
46+
}
47+
48+
type Event struct{}
49+
50+
func handle(Event) {
51+
}

Diff for: 10-standard-lib/77-json-handling/map-any/main.go

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package main
2+
3+
import "encoding/json"
4+
5+
func listing1() error {
6+
b := getMessage()
7+
var m map[string]any
8+
err := json.Unmarshal(b, &m)
9+
if err != nil {
10+
return err
11+
}
12+
return nil
13+
}
14+
15+
func getMessage() []byte {
16+
return nil
17+
}
+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package main
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
"time"
7+
)
8+
9+
type Event struct {
10+
Time time.Time
11+
}
12+
13+
func listing1() error {
14+
t := time.Now()
15+
event1 := Event{
16+
Time: t,
17+
}
18+
19+
b, err := json.Marshal(event1)
20+
if err != nil {
21+
return err
22+
}
23+
24+
var event2 Event
25+
err = json.Unmarshal(b, &event2)
26+
if err != nil {
27+
return err
28+
}
29+
30+
fmt.Println(event1 == event2)
31+
return nil
32+
}
33+
34+
func listing2() error {
35+
t := time.Now()
36+
event1 := Event{
37+
Time: t.Truncate(0),
38+
}
39+
40+
b, err := json.Marshal(event1)
41+
if err != nil {
42+
return err
43+
}
44+
45+
var event2 Event
46+
err = json.Unmarshal(b, &event2)
47+
if err != nil {
48+
return err
49+
}
50+
51+
fmt.Println(event1 == event2)
52+
return nil
53+
}
+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package main
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
"time"
7+
)
8+
9+
func main() {
10+
if err := listing1(); err != nil {
11+
panic(err)
12+
}
13+
if err := listing2(); err != nil {
14+
panic(err)
15+
}
16+
}
17+
18+
type Event1 struct {
19+
ID int
20+
time.Time
21+
}
22+
23+
func listing1() error {
24+
event := Event1{
25+
ID: 1234,
26+
Time: time.Now(),
27+
}
28+
29+
b, err := json.Marshal(event)
30+
if err != nil {
31+
return err
32+
}
33+
34+
fmt.Println(string(b))
35+
return nil
36+
}
37+
38+
type Event2 struct {
39+
ID int
40+
Time time.Time
41+
}
42+
43+
func listing2() error {
44+
event := Event2{
45+
ID: 1234,
46+
Time: time.Now(),
47+
}
48+
49+
b, err := json.Marshal(event)
50+
if err != nil {
51+
return err
52+
}
53+
54+
fmt.Println(string(b))
55+
return nil
56+
}

Diff for: 10-standard-lib/78-sql/null-values/main.go

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package main
2+
3+
import "database/sql"
4+
5+
func listing1(db *sql.DB, id string) error {
6+
rows, err := db.Query("SELECT DEP, AGE FROM EMP WHERE ID = ?", id)
7+
if err != nil {
8+
return err
9+
}
10+
// Defer closing rows
11+
12+
var (
13+
department string
14+
age int
15+
)
16+
for rows.Next() {
17+
err := rows.Scan(&department, &age)
18+
if err != nil {
19+
return err
20+
}
21+
// ...
22+
}
23+
return nil
24+
}
25+
26+
func listing2(db *sql.DB, id string) error {
27+
rows, err := db.Query("SELECT DEP, AGE FROM EMP WHERE ID = ?", id)
28+
if err != nil {
29+
return err
30+
}
31+
// Defer closing rows
32+
33+
var (
34+
department *string
35+
age int
36+
)
37+
for rows.Next() {
38+
err := rows.Scan(&department, &age)
39+
if err != nil {
40+
return err
41+
}
42+
// ...
43+
}
44+
return nil
45+
}
46+
47+
func listing3(db *sql.DB, id string) error {
48+
rows, err := db.Query("SELECT DEP, AGE FROM EMP WHERE ID = ?", id)
49+
if err != nil {
50+
return err
51+
}
52+
// Defer closing rows
53+
54+
var (
55+
department sql.NullString
56+
age int
57+
)
58+
for rows.Next() {
59+
err := rows.Scan(&department, &age)
60+
if err != nil {
61+
return err
62+
}
63+
// ...
64+
}
65+
return nil
66+
}

Diff for: 10-standard-lib/78-sql/prepared-statements/main.go

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package main
2+
3+
import "database/sql"
4+
5+
func listing1(db *sql.DB, id string) error {
6+
stmt, err := db.Prepare("SELECT * FROM ORDER WHERE ID = ?")
7+
if err != nil {
8+
return err
9+
}
10+
rows, err := stmt.Query(id)
11+
if err != nil {
12+
return err
13+
}
14+
_ = rows
15+
return nil
16+
}
+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package main
2+
3+
import (
4+
"context"
5+
"database/sql"
6+
"log"
7+
)
8+
9+
func (c *conn) get1(ctx context.Context, id string) (string, int, error) {
10+
rows, err := c.db.QueryContext(ctx,
11+
"SELECT DEP, AGE FROM EMP WHERE ID = ?", id)
12+
if err != nil {
13+
return "", 0, err
14+
}
15+
defer func() {
16+
err := rows.Close()
17+
if err != nil {
18+
log.Printf("failed to close rows: %v\n", err)
19+
}
20+
}()
21+
22+
var (
23+
department string
24+
age int
25+
)
26+
for rows.Next() {
27+
err := rows.Scan(&department, &age)
28+
if err != nil {
29+
return "", 0, err
30+
}
31+
}
32+
33+
return department, age, nil
34+
}
35+
36+
func (c *conn) get2(ctx context.Context, id string) (string, int, error) {
37+
rows, err := c.db.QueryContext(ctx,
38+
"SELECT DEP, AGE FROM EMP WHERE ID = ?", id)
39+
if err != nil {
40+
return "", 0, err
41+
}
42+
defer func() {
43+
err := rows.Close()
44+
if err != nil {
45+
log.Printf("failed to close rows: %v\n", err)
46+
}
47+
}()
48+
49+
var (
50+
department string
51+
age int
52+
)
53+
for rows.Next() {
54+
err := rows.Scan(&department, &age)
55+
if err != nil {
56+
return "", 0, err
57+
}
58+
}
59+
if err := rows.Err(); err != nil {
60+
return "", 0, err
61+
}
62+
63+
return department, age, nil
64+
}
65+
66+
type conn struct {
67+
db *sql.DB
68+
}

Diff for: 10-standard-lib/78-sql/sql-open/main.go

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package main
2+
3+
import "database/sql"
4+
5+
var dsn = ""
6+
7+
func listing1() error {
8+
db, err := sql.Open("mysql", dsn)
9+
if err != nil {
10+
return err
11+
}
12+
13+
if err := db.Ping(); err != nil {
14+
return err
15+
}
16+
17+
_ = db
18+
return nil
19+
}

0 commit comments

Comments
 (0)