diff --git a/main.go b/main.go
new file mode 100644
index 0000000..26c5fdb
--- /dev/null
+++ b/main.go
@@ -0,0 +1,91 @@
+package main
+
+import (
+ "database/sql"
+ "fmt"
+ "math/rand"
+ "net/http"
+ "net/url"
+ "time"
+
+ _ "modernc.org/sqlite"
+)
+
+func main() {
+ db, err := sql.Open("sqlite", "base.db")
+ if err != nil {
+ panic(err)
+ }
+ defer db.Close()
+
+ _, err = db.Exec("CREATE TABLE IF NOT EXISTS urls (short TEXT, long TEXT)")
+ if err != nil {
+ panic(err)
+ }
+
+ s := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
+ rng := rand.New(rand.NewSource(time.Now().UnixNano()))
+ c := rng.Int63()
+
+ http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
+ if r.URL.Path == "/" && r.Method == "GET" {
+ fmt.Fprintln(w, "
shortener
")
+ fmt.Fprintln(w, "")
+ return
+ }
+
+ if r.URL.Path == "/" && r.Method == "POST" {
+ a := r.FormValue("url")
+
+ if a == "" {
+ fmt.Fprintln(w, "empty")
+ return
+ }
+
+ u, err := url.Parse(a)
+ if err != nil || u.Scheme == "" || u.Host == "" {
+ fmt.Fprintln(w, "bad url")
+ return
+ }
+
+ b := ""
+ t := c
+ c = c + 1
+ for t > 0 {
+ b = string(s[t%62]) + b
+ t = t / 62
+ }
+ for len(b) < 6 {
+ b = string(s[0]) + b
+ }
+
+ // сохранение в базу
+ _, err = db.Exec("INSERT INTO urls (short, long) VALUES (?, ?)", b, a)
+ if err != nil {
+ fmt.Fprintln(w, "db error")
+ return
+ }
+
+ fmt.Fprintln(w, "short url: http://localhost:8080/"+b)
+ return
+ }
+
+ x := r.URL.Path[1:]
+ y := ""
+
+ err = db.QueryRow("SELECT long FROM urls WHERE short = ?", x).Scan(&y)
+
+ if err != nil || y == "" {
+ fmt.Fprintln(w, "not found")
+ return
+ }
+
+ http.Redirect(w, r, y, 302)
+ })
+
+ fmt.Println("start http://localhost:8080")
+ http.ListenAndServe(":8080", nil)
+}