-
Notifications
You must be signed in to change notification settings - Fork 4
/
06_pointer_to_struct_item.go
77 lines (65 loc) · 1.94 KB
/
06_pointer_to_struct_item.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// Seriál "Programovací jazyk Go"
// https://www.root.cz/serialy/programovaci-jazyk-go/
//
// Třicátá devátá část
// Programovací jazyk Go a relační databáze
// https://www.root.cz/clanky/programovaci-jazyk-go-a-relacni-databaze/
//
// Repositář:
// https://github.com/tisnik/go-root/
//
// Seznam demonstračních příkladů ze třicáté deváté části:
// https://github.com/tisnik/go-root/blob/master/article_39/README.md
package main
import (
"database/sql"
"flag"
"fmt"
_ "github.com/mattn/go-sqlite3"
"log"
)
type Customer struct {
Id int
Name string
Surname string
Address string
Country string
Phone string
}
func readListOfCustomers(connections *sql.DB) ([]Customer, error) {
customers := []Customer{}
rows, err := connections.Query("SELECT id, name, surname, address, country, phone FROM customers ORDER BY id")
if err != nil {
return customers, err
}
defer rows.Close()
for rows.Next() {
var customer Customer
if err := rows.Scan(&customer.Id, &customer.Name, &customer.Surname, &customer.Address, &customer.Country, &customer.Phone); err != nil {
return customers, err
}
customers = append(customers, customer)
}
if err := rows.Err(); err != nil {
return customers, err
}
return customers, nil
}
func main() {
dbDriver := flag.String("dbdriver", "sqlite3", "database driver specification")
storageSpecification := flag.String("storage", "./test.db", "storage specification")
flag.Parse()
connections, err := sql.Open(*dbDriver, *storageSpecification)
if err != nil {
log.Fatal("Can not connect to data storage", err)
}
defer connections.Close()
log.Printf("Connected to database %v", connections)
customers, err := readListOfCustomers(connections)
if err != nil {
log.Fatal(err)
}
for _, customer := range customers {
fmt.Printf("%2d %-10s %-10s %-12s %-12s %s\n", customer.Id, customer.Name, customer.Surname, customer.Address, customer.Country, customer.Phone)
}
}