package main
import (
...
"fmt"
"strconv"
...
)
type User struct { ... }
var users = []User{ ... }
// 추가 : 호출된 정보값을 표시
func HttpInfo(r *http.Request) {
fmt.Printf("%s\t %s\t %s\t %s\r\n", r.Method, r.Proto, r.Host, r.URL)
}
// 추가 : 별도 함수로 구분
func setJsonHeader(w http.ResponseWriter) {
w.Header().Set("Content-Type", "application/json")
}
func main() {
// main.go 실행시, 표시
fmt.Println("Api Connected Port 3000....")
r := mux.NewRouter().StrictSlash(true)
// 핸들러 로직
// user에 대한 데이터 전체 가져오기
r.HandleFunc("/users", getUsers).Methods("GET")
// 특정 user에 대한 데이터 가져오기
r.HandleFunc("/users/{id}", getUser).Methods("GET")
log.Fatal(http.ListenAndServe(":3000", r))
}
// 수정 : 전체 user 정보 전달
func getUsers(w http.ResponseWriter, r *http.Request) {
setJsonHeader(w) //
HttpInfo(r) // 호출된 정보값을 표시
json.NewEncoder(w).Encode(users)
}
// 추가 : 특정 user 정보 전달
func getUser(w http.ResponseWriter, r *http.Request) {
setJsonHeader(w) //
HttpInfo(r) // 호출된 정보값을 표시
// 파라미터값 체크
params := mux.Vars(r)
// 파라미터값 중 id값 추출
id, _ := strconv.Atoi(params["id"])
// 일치하는 user id를 확인
for _, user := range users {
if user.Id == id {
// 일치하는 user의 데이터 표시 및 함수 종료
json.NewEncoder(w).Encode(user)
return
}
}
// 일치하는 id가 없을 경우, blank 표시
json.NewEncoder(w).Encode(&User{})
}