cd workspace/go/src/api
go get github.com/go-sql-driver/mysql
main.go 수정
package main
import (
...
// 코드 추가
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
type User struct {
...
}
// Database 정보를 저장할 구조체
type DBInfo struct {
user string
pwd string
url string
engine string
database string
}
// 주석 처리 or 제거
// Database에서 정보를 받아오기에, 더 이상 쓰지 않음
/*
var users = []User{
User{Id: 1, Name: "David", Email: "test@gmail.com", Password: "123"},
User{Id: 2, Name: "Nata", Email: "test@email.com", Password: "qwer"},
}
*/
// 코드 추가
var users = []User{} // 별도로 데이터를 저장
var user = User{} // 별도로 데이터를 저장
// Database 연결 정보
var dbInfo = DBInfo{"아이디", "비밀번호", "localhost:3306", "mysql", "test_crud"}
type Response struct { ... }
func NewResponse(method, message string, status int) Response { ... }
func HttpInfo(r *http.Request) { ... }
// Content-Type을 "application/json"으로 설정하여 JSON 전달
func setJsonHeader(w http.ResponseWriter) {
w.Header().Set("Content-Type", "application/json")
}
func main() { ... }
// 코드 추가 : sql.DB 객체 생성
func connetDatabase() *sql.DB {
dataSource := dbInfo.user + ":" + dbInfo.pwd + "@tcp(" + dbInfo.url + ")/" + dbInfo.database
db, err := sql.Open(dbInfo.engine, dataSource)
checkErr(err)
return db
}
// 코드 추가 : 에러 체크
func checkErr(err error) {
if err != nil {
log.Fatal(err)
}
}
// 전체 user 정보 전달
func getUsers(w http.ResponseWriter, r *http.Request) {
setJsonHeader(w)
HttpInfo(r)
// sql.DB 객체 생성
db := connetDatabase()
// 지연하여 닫는다(필수)
defer db.Close()
// User 전체 데이터를 불러오는 SQL 쿼리
rows, err := db.Query("SELECT * FROM users")
checkErr(err)
// 지연하여 닫는다(필수)
defer rows.Close()
users = []User{}
for rows.Next() {
user = User{}
err := rows.Scan(&user.Id, &user.Name, &user.Email, &user.Password)
checkErr(err)
fmt.Println(user)
users = append(users, user)
}
fmt.Println(len(users))
json.NewEncoder(w).Encode(users)
}
...