MySQL 및 Golang을 사용하여 (CRUD) 빌드.
10166 단어 programmingapiproductivitygo
이 예제에서는 go 프로그래밍과 MySQL을 사용하여 crud(Create, Read, Update 및 Delete)를 배우고 생성하는 예제 프로그램을 제시할 것입니다.
Rest API라고도 함
1단계: 프로젝트에 mysql 드라이버 가져오기 및 준비
다음 명령을 실행하기 위해 go lang용 MySQL 데이터베이스 드라이버를 설치합니다.
$ go get -u github.com/go-sql-driver/mysql
설치 후 "gocrud"와 같은 crud 앱용 데이터베이스를 생성합니다.
2단계: 직원 세부 정보를 저장하기 위한 테이블 만들기
이를 위해 다음 코드를 사용할 수 있습니다.
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;
3단계: 구조체, 처리기 및 처리기 함수 만들기
이를 위해 main.go와 같은 파일을 생성하고 이 파일 내의 다운로드 코드를 사용합니다.
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(&id, &name, &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(&id, &fullname, &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(&id, &fullname, &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)
}
4단계: 이제 템플릿 파일 만들기
추가 처리를 위해 CRUD 애플리케이션용 템플릿 파일을 생성해야 합니다.
이를 위해 Index.tmpl이라는 템플릿 파일을 만들고 다음 코드를 입력합니다.
{{ define "Index" }}
{{ template "Header" }}
{{ template "Menu" }}
<h2> Registered </h2>
<table border="1">
<thead>
<tr>
<td>ID</td>
<td>Full Name</td>
<td>Address</td>
<td>View</td>
<td>Edit</td>
<td>Delete</td>
</tr>
</thead>
<tbody>
{{ range . }}
<tr>
<td>{{ .Id }}</td>
<td> {{ .Full_Name }} </td>
<td>{{ .Address }} </td>
<td><a href="/show?id={{ .Id }}">View</a></td>
<td><a href="/edit?id={{ .Id }}">Edit</a></td>
<td><a href="/delete?id={{ .Id }}">Delete</a><td>
</tr>
{{ end }}
</tbody>
</table>
{{ template "Footer" }}
{{ end }}
이를 위해 동일한 폴더에 다른 템플릿 파일을 만듭니다. Header.tmpl이라는 템플릿 파일을 만들었습니다.
{{ define "Header" }}
<!DOCTYPE html>
<html lang="en-US">
<head>
<title>CRUD app using Golang </title>
<meta charset="UTF-8" />
</head>
<body>
<h1>Golang Mysql Curd Example</h1>
{{ end }}
다시 동일한 폴더에 다른 템플릿 파일을 만들어야 합니다. Footer.tmpl이라는 템플릿 파일을 만들었습니다.
{{ define "Footer" }}
</body>
</html>
{{ end }}
다시 동일한 폴더에 다른 템플릿 파일을 만들어야 합니다. Menu.tmpl이라는 템플릿 파일을 만들었습니다.
{{ define "Menu" }}
<a href="/">HOME</a> |
<a href="/new">NEW</a>
{{ end }}
다시 동일한 폴더에 다른 템플릿 파일을 만들어야 합니다. Show.tmpl이라는 템플릿 파일을 만들었습니다.
{{ define "Show" }}
{{ template "Header" }}
{{ template "Menu" }}
<h2> Register {{ .Id }} </h2>
<p>Name: {{ .Full_Name }}</p>
<p>City: {{ .Address }}</p><br /> <a href="/edit?id={{ .Id }}">Edit</a></p>
{{ template "Footer" }}
{{ end }}
다시 동일한 폴더에 다른 템플릿 파일을 만들어야 합니다. New.tmpl이라는 템플릿 파일을 만들었습니다.
{{ define "New" }}
{{ template "Header" }}
{{ template "Menu" }}
<h2>New Name and Address</h2>
<form method="POST" action="insert">
<label> Full Name </label><input type="text" name="fullname" /><br />
<label> Address</label><input type="text" name="Address" /><br />
<input type="submit" value="Submit" />
</form>
{{ template "Footer" }}
{{ end }}
마지막으로 항목을 업데이트하기 위한 다른 템플릿 파일을 생성합니다. Edit.tmpl이라는 파일을 생성할 수 있습니다.
{{ define "Edit" }}
{{ template "Header" }}
{{ template "Menu" }}
<h2>Edit Name and City</h2>
<form method="POST" action="update">
<input type="hidden" name="uid" value="{{ .Id }}" />
<label> Full Name </label><input type="text" name="fullname" value="{{ .Full_Name }}" /><br />
<label> Address </label><input type="text" name="Address" value="{{ .Address }}" /><br />
<input type="submit" value="Submit" />
</form><br />
{{ template "Footer" }}
{{ end }}
축하합니다! 우리는 Golang과 MySQL을 사용하여 CRUD 애플리케이션을 만들었습니다.
이제 가셔도 좋습니다..
다음 명령을 실행합니다.
$ go run main.go
아래 주소에서 보실 수 있습니다
http://localhost:8080
즐기다!!
행복한 코딩!
Reference
이 문제에 관하여(MySQL 및 Golang을 사용하여 (CRUD) 빌드.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/smir45/building-a-crud-using-mysql-and-golang-mkl텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)