<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Samir Mishra</title>
    <description>The latest articles on DEV Community by Samir Mishra (@smir45).</description>
    <link>https://dev.to/smir45</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F659936%2Fc44bc5c2-e72b-41af-bd46-286e131dfa4d.png</url>
      <title>DEV Community: Samir Mishra</title>
      <link>https://dev.to/smir45</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/smir45"/>
    <language>en</language>
    <item>
      <title>Building a (CRUD) using MySQL and Golang.</title>
      <dc:creator>Samir Mishra</dc:creator>
      <pubDate>Sun, 17 Jul 2022 17:30:31 +0000</pubDate>
      <link>https://dev.to/smir45/building-a-crud-using-mysql-and-golang-mkl</link>
      <guid>https://dev.to/smir45/building-a-crud-using-mysql-and-golang-mkl</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ovZObrGW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l3tcicd07qxfgbjc95tq.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ovZObrGW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l3tcicd07qxfgbjc95tq.jpeg" alt="Image description" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this example i am going to present an example program to learn and create a crud(Create, Read, Update and Delete) using go programming and MySQL.&lt;br&gt;
It is also known as Rest API&lt;/p&gt;

&lt;p&gt;Step 1: Import and prepare mysql driver into your project&lt;br&gt;
Installing MySQL database driver for go lang for this run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ go get -u github.com/go-sql-driver/mysql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After installing create the database for your crud app for example “gocrud”&lt;/p&gt;

&lt;p&gt;Step 2: Creating a table for storing details of employees&lt;br&gt;
for this you can use the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE TABLE `myemployee` (
  `id` int(6) unsigned NOT NULL AUTO_INCREMENT,
  `fullname` varchar(25) NOT NULL,
  `address` varchar(25) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 3: Create a Struct, Handler and Handler Function&lt;br&gt;
for this create a file for example main.go and use the downloading codes inside this file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package main

import (
    "database/sql"
    "log"
    "net/http"
    "text/template"

    _ "github.com/go-sql-driver/mysql"
)

type Myemployee struct {
    Id    int
    Full_Name  string
    Address string
}

func dbConn() (db *sql.DB) {
    dbDriver := "mysql"
    dbUser := "root"
    dbPass := "root"
    dbName := "goblog"
    db, err := sql.Open(dbDriver, dbUser+":"+dbPass+"@/"+dbName)
    if err != nil {
        panic(err.Error())
    }
    return db
}

var tmpl = template.Must(template.ParseGlob("form/*"))

func Index(w http.ResponseWriter, r *http.Request) {
    db := dbConn()
    selDB, err := db.Query("SELECT * FROM Employee ORDER BY id DESC")
    if err != nil {
        panic(err.Error())
    }
    emp := Myemployee{}
    res := []Myemployee{}
    for selDB.Next() {
        var id int
        var fullname, address string
        err = selDB.Scan(&amp;amp;id, &amp;amp;name, &amp;amp;city)
        if err != nil {
            panic(err.Error())
        }
        emp.Id = id
        emp.Full_Name = fullname
        emp.Address = address
        res = append(res, emp)
    }
    tmpl.ExecuteTemplate(w, "Index", res)
    defer db.Close()
}

func Show(w http.ResponseWriter, r *http.Request) {
    db := dbConn()
    nId := r.URL.Query().Get("id")
    selDB, err := db.Query("SELECT * FROM Myemployee WHERE id=?", nId)
    if err != nil {
        panic(err.Error())
    }
    emp := Myemployee{}
    for selDB.Next() {
        var id int
        var fullname, address string
        err = selDB.Scan(&amp;amp;id, &amp;amp;fullname, &amp;amp;address)
        if err != nil {
            panic(err.Error())
        }
        emp.Id = id
        emp.Full_Name = fullname
        emp.Address = address
    }
    tmpl.ExecuteTemplate(w, "Show", emp)
    defer db.Close()
}

func New(w http.ResponseWriter, r *http.Request) {
    tmpl.ExecuteTemplate(w, "New", nil)
}

func Edit(w http.ResponseWriter, r *http.Request) {
    db := dbConn()
    nId := r.URL.Query().Get("id")
    selDB, err := db.Query("SELECT * FROM Myemployee WHERE id=?", nId)
    if err != nil {
        panic(err.Error())
    }
    emp := Myemployee{}
    for selDB.Next() {
        var id int
        var fullname, address string
        err = selDB.Scan(&amp;amp;id, &amp;amp;fullname, &amp;amp;address)
        if err != nil {
            panic(err.Error())
        }
        emp.Id = id
        emp.Full_Name = fullname
        emp.Address = address
    }
    tmpl.ExecuteTemplate(w, "Edit", emp)
    defer db.Close()
}

func Insert(w http.ResponseWriter, r *http.Request) {
    db := dbConn()
    if r.Method == "POST" {
        fullname := r.FormValue("fullname")
        address:= r.FormValue("address")
        insForm, err := db.Prepare("INSERT INTO Myemployee(fullname, address) VALUES(?,?)")
        if err != nil {
            panic(err.Error())
        }
        insForm.Exec(name, city)
        log.Println("INSERT: FullName: " + fullname + " | Address: " + address)
    }
    defer db.Close()
    http.Redirect(w, r, "/", 301)
}

func Update(w http.ResponseWriter, r *http.Request) {
    db := dbConn()
    if r.Method == "POST" {
        fullname := r.FormValue("fullname")
        address:= r.FormValue("address")
        id := r.FormValue("uid")
        insForm, err := db.Prepare("UPDATE Myemployee SET firstname=?, address=? WHERE id=?")
        if err != nil {
            panic(err.Error())
        }
        insForm.Exec(fullname, address, id)
        log.Println("UPDATE: FullName: " + fullname + " | Address: " + address)
    }
    defer db.Close()
    http.Redirect(w, r, "/", 301)
}

func Delete(w http.ResponseWriter, r *http.Request) {
    db := dbConn()
    emp := r.URL.Query().Get("id")
    delForm, err := db.Prepare("DELETE FROM Myemployee WHERE id=?")
    if err != nil {
        panic(err.Error())
    }
    delForm.Exec(emp)
    log.Println("DELETE")
    defer db.Close()
    http.Redirect(w, r, "/", 301)
}

func main() {
    log.Println("Server started on: http://localhost:8080")
    http.HandleFunc("/", Index)
    http.HandleFunc("/show", Show)
    http.HandleFunc("/new", New)
    http.HandleFunc("/edit", Edit)
    http.HandleFunc("/insert", Insert)
    http.HandleFunc("/update", Update)
    http.HandleFunc("/delete", Delete)
    http.ListenAndServe(":8080", nil)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 4: Now create template files&lt;br&gt;
For further processing you will need to create template files for your CRUD application.&lt;br&gt;
for this lets create a template file named Index.tmpl and put the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{{ define "Index" }}
  {{ template "Header" }}
    {{ template "Menu"  }}
    &amp;lt;h2&amp;gt; Registered &amp;lt;/h2&amp;gt;
    &amp;lt;table border="1"&amp;gt;
      &amp;lt;thead&amp;gt;
      &amp;lt;tr&amp;gt;
        &amp;lt;td&amp;gt;ID&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;Full Name&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;Address&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;View&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;Edit&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;Delete&amp;lt;/td&amp;gt;
      &amp;lt;/tr&amp;gt;
       &amp;lt;/thead&amp;gt;
       &amp;lt;tbody&amp;gt;
    {{ range . }}
      &amp;lt;tr&amp;gt;
        &amp;lt;td&amp;gt;{{ .Id }}&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt; {{ .Full_Name }} &amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;{{ .Address }} &amp;lt;/td&amp;gt; 
        &amp;lt;td&amp;gt;&amp;lt;a href="/show?id={{ .Id }}"&amp;gt;View&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;&amp;lt;a href="/edit?id={{ .Id }}"&amp;gt;Edit&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;&amp;lt;a href="/delete?id={{ .Id }}"&amp;gt;Delete&amp;lt;/a&amp;gt;&amp;lt;td&amp;gt;
      &amp;lt;/tr&amp;gt;
    {{ end }}
       &amp;lt;/tbody&amp;gt;
    &amp;lt;/table&amp;gt;
  {{ template "Footer" }}
{{ end }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create another template file in same folder for this i have created a template file named Header.tmpl&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{{ define "Header" }}
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en-US"&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;title&amp;gt;CRUD app using Golang &amp;lt;/title&amp;gt;
        &amp;lt;meta charset="UTF-8" /&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;h1&amp;gt;Golang Mysql Curd Example&amp;lt;/h1&amp;gt;   
{{ end }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Again you have to create another template file in same folder for this i have created a template file named Footer.tmpl&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{{ define "Footer" }}
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
{{ end }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Again you have to create another template file in same folder for this i have created a template file named Menu.tmpl&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{{ define "Menu" }}
&amp;lt;a href="/"&amp;gt;HOME&amp;lt;/a&amp;gt; | 
&amp;lt;a href="/new"&amp;gt;NEW&amp;lt;/a&amp;gt;
{{ end }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Again you have to create another template file in same folder for this i have created a template file named Show.tmpl&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{{ define "Show" }}
  {{ template "Header" }}
    {{ template "Menu"  }}
    &amp;lt;h2&amp;gt; Register {{ .Id }} &amp;lt;/h2&amp;gt;
      &amp;lt;p&amp;gt;Name: {{ .Full_Name }}&amp;lt;/p&amp;gt;
      &amp;lt;p&amp;gt;City:  {{ .Address }}&amp;lt;/p&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;a href="/edit?id={{ .Id }}"&amp;gt;Edit&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
  {{ template "Footer" }}
{{ end }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Again you have to create another template file in same folder for this i have created a template file named New.tmpl&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
{{ define "New" }}
  {{ template "Header" }}
    {{ template "Menu" }} 
   &amp;lt;h2&amp;gt;New Name and Address&amp;lt;/h2&amp;gt;  
    &amp;lt;form method="POST" action="insert"&amp;gt;
      &amp;lt;label&amp;gt; Full Name &amp;lt;/label&amp;gt;&amp;lt;input type="text" name="fullname" /&amp;gt;&amp;lt;br /&amp;gt;
      &amp;lt;label&amp;gt; Address&amp;lt;/label&amp;gt;&amp;lt;input type="text" name="Address" /&amp;gt;&amp;lt;br /&amp;gt;
      &amp;lt;input type="submit" value="Submit" /&amp;gt;
    &amp;lt;/form&amp;gt;
  {{ template "Footer" }}
{{ end }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At last create another template file for updating item for this we can create a file named Edit.tmpl&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{{ define "Edit" }}
  {{ template "Header" }}
    {{ template "Menu" }} 
   &amp;lt;h2&amp;gt;Edit Name and City&amp;lt;/h2&amp;gt;  
    &amp;lt;form method="POST" action="update"&amp;gt;
      &amp;lt;input type="hidden" name="uid" value="{{ .Id }}" /&amp;gt;
      &amp;lt;label&amp;gt; Full Name &amp;lt;/label&amp;gt;&amp;lt;input type="text" name="fullname" value="{{ .Full_Name }}"  /&amp;gt;&amp;lt;br /&amp;gt;
      &amp;lt;label&amp;gt; Address &amp;lt;/label&amp;gt;&amp;lt;input type="text" name="Address" value="{{ .Address }}"  /&amp;gt;&amp;lt;br /&amp;gt;
      &amp;lt;input type="submit" value="Submit" /&amp;gt;
    &amp;lt;/form&amp;gt;&amp;lt;br /&amp;gt;    
  {{ template "Footer" }}
{{ end }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Congratulation! we have created our CRUD application using Golang and MySQL&lt;br&gt;
Now you are good to go..&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Run following command:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ go run main.go

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can view it on following address&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8080

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enjoy!!&lt;br&gt;
&lt;strong&gt;Happy Coding !&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>programming</category>
      <category>api</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
