hi everyone, today i try to create rest api in golang use standart library. in thise case i want to get data user
by id
from database. so pattern uri like
/user/{idUser}
but before that, i want to test the handler can work well. in function handler will be shown text “work”. my problem is if access to http://localhost:9393/user/1
should be shown text is work!
(function GetUserId) but shown is the even HomeHandler
.
mycode main.go :
package main
import (
“database/sql”
“encoding/json”
“fmt”
“net/http”“github.com/muhfaris/goFun/basic_serialdata/01_go_mysql_rest/database”
type ServeMux struct {
// contains filtered or unexported fields
}// DB initialize of sql.DB
var DB *sql.DBfunc main() {
mux := http.NewServeMux()
mux.HandleFunc(“/”, HomeHandler)
mux.HandleFunc(“/users”, GetUsers)
mux.HandleFunc(“/user/{id}”, GetUserId)
http.ListenAndServe(“:9393”, mux)
}func HomeHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w,Access Data To Get all User : /users Get User by Id : /user/{id}
)
}func GetUsers(w http.ResponseWriter, r *http.Request) {
dbdata := database.GetDataUsers()
json.NewEncoder(w).Encode(dbdata)
}func GetUserId(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, “Work!”)
}
database.go :
package database
import (
“database/sql”
“fmt”
)const (
username = “surname”
password = “”
dbname = “database”
server = “localhost”
port = 3306
)// User for get user from db
type User struct {
Id int
Name string
Email string
}func Connect() (*sql.DB, error) {
dbtext := fmt.Sprintf(“%s:%s@tcp(%s:%d)/%s”, username, password, server, port, dbname)
db, err := sql.Open(“mysql”, dbtext)if err == nil {
}
return db, nil
}func GetDataUsers() (data *User) {
DB, err := Connect()
var u User
defer DB.Close()
if err == nil {
// Read data
readdb, _ := DB.Query(“select * from user”)
for readdb.Next() {
readdb.Scan(&u.Id, &u.Name, &u.Email)
data = append(data, &User{
Id: u.Id,
Name: u.Name,
Email: u.Email,
})
}
} else {
panic(err.Error())
}
return
}