1.1. fejezet, PostgreSQL kapcsolat

Csomagok telepítése

# Properties fájl olvasása
go get -u github.com/magiconair/properties
# PostgreSQL kapcsolat
go get -u github.com/lib/pq

http-server.go

package main
 
import (
	_ "database/sql"
	"fmt"
	_ "github.com/lib/pq"
	"github.com/magiconair/properties"
	"net/http"
)
 
var p = properties.MustLoadFile("config.properties", properties.UTF8)
var (
	psqlInfo = fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",
		p.MustGetString("host"),
		p.MustGetInt("port"),
		p.MustGetString("user"),
		p.MustGetString("password"),
		p.MustGetString("dbname"),
	)
)
 
func printClients(w http.ResponseWriter, req *http.Request) {
	clients, err := getClients()
	if err != nil {
		panic(err)
	}
	fmt.Fprintln(w, "<html>")
	fmt.Fprintln(w, "<h2>Szia, ezek a kliens adatok</h2>")
	fmt.Fprintln(w, "<table><tbody>")
	for _, client := range clients {
		fmt.Fprintln(w, "<tr>")
		fmt.Fprintf(w, "<td>%d</td><td>%s</td>", client.id, client.neve)
		fmt.Fprintln(w, "</tr>")
	}
	fmt.Fprintln(w, "</tbody></table>")
	fmt.Fprintln(w, "</html>")
}
 
func main() {
 
	http.HandleFunc("/clients", printClients)
 
	err := http.ListenAndServe(":8090", nil)
	if err != nil {
		return
	}
}

repository.go

package main
 
import (
	"database/sql"
	"log"
)
 
type Client struct {
	id   int
	neve string
}
 
func getClients() ([]Client, error) {
	db, err := sql.Open("postgres", psqlInfo)
	if err != nil {
		panic(err)
	}
 
	err = db.Ping()
	if err != nil {
		panic(err)
	}
 
	defer db.Close()
 
	var client Client
	rows, err := db.Query("SELECT id,neve FROM client")
	if err != nil {
		panic(err)
	}
	defer rows.Close()
 
	results := []Client{}
 
	for rows.Next() {
		if err = rows.Scan(&client.id, &client.neve); err != nil {
			log.Fatal(err)
			break
		}
		results = append(results, client)
	}
	return results, err
}