이후 설정 적용을 위해서는 MySQL을 재시작해야 합니다. 서비스에서 설치하신 Database를 찾으셔서 다시 시작을 눌러줍니다.
저의 경우, MariaDB를 설치했기에 다음과 같이 표시됩니다.
Windows Service
이미 UTF8로 설정된 기존 데이터베이스나 테이블이 있을 경우 다음 쿼리문을 통해 설정을 변경해주셔야만 합니다.
ALTER DATABASE <데이터베이스 이름> CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE <테이블 이름> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
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)
}
...