Go 언어로 웹 사이트를 만들어 보세요(6: JSON에서 사용자 정보를 읽고 참조)
Go 언어로 웹 사이트 만들기: 목록
http://qiita.com/y_ussie/items/8fcc3077274449478bc9
지난번 재개편http://qiita.com/y_ussie/items/12bb4fd8cefb740581f8의 계속이 되었다.
코드도 다 정리했으니까 계속 기능을 추가하고 싶어요.
하고 싶은 일
다음 단계로 삼다
먼저 JSON에서 사용자 정보를 읽습니다.
사용자 정보의 JSON 데이터
그래서 다음과 같은 JSON 데이터를 만들어 봤습니다.
data/users.json[
{
"id": "806d5832-e253-40ca-be80-a00878898c37",
"user_id": "a-chan",
"password": "5f4dcc3b5aa765d61d8327deb882cf99",
"full_name": "Nishiwaki Ayaka"
},
{
"id": "e7bdce91-c9bb-4a29-91f8-750ad4b18bfa",
"user_id": "kashiyuka",
"password": "5f4dcc3b5aa765d61d8327deb882cf99",
"full_name": "Kashino Yuka"
},
{
"id": "b87c826e-429b-4f50-aa35-b99f11a40b08",
"user_id": "nocchi",
"password": "5f4dcc3b5aa765d61d8327deb882cf99",
"full_name": "Omoto Ayano"
}
]
필드는 id,user-id, password, full_네임입니다.
id는 uidv4에서 생성된 유일한 값입니다.password는 MD5 산열 문자열을 사용합니다.
이 JSON의 모델과 데이터 액세스기를 참고하는 세트는 다음과 같습니다.고로 변하다.
JSON을 읽기 위한 모델 구성체는 다음과 같습니다.// User はユーザーの情報を表します。
type User struct {
ID ID `json:"id"`
UserID string `json:"user_id"`
Password StringMD5 `json:"password"`
FullName string `json:"full_name"`
}
// 情報をメモリ上に持つためのmap
var users map[ID]User
이 구조에서 다음 처리를 통해 JSON 데이터를 읽습니다.func (a *UserDataAccessor) decodeJSON() error {
// JSONファイル読み込み
bytes, err := ioutil.ReadFile("data/users.json")
if err != nil {
return err
}
// JSONをデコードする
var records []User
if err := json.Unmarshal(bytes, &records); err != nil {
return err
}
// 結果をmapにセットする
for _, x := range records {
users[x.ID] = x
}
return nil
}
요청 처리 프로그램에서 읽은 JSON 데이터를 참조하기 위해 UserDataAccessor라는 구조체를 데이터 액세스기로 제작하였다.
이것은 http://qiita.com/y_ussie/items/b1db86b0b54ec69bb928가 만든 세션 데이터 저장소와 마찬가지로 하나의 Goroutine를 통해 맵에 대한 접근 순서로 데이터 작업을 처리하고 외부에서Channel을 통해 접근한다.
이번에는 읽기만 하기 때문에 이 정도까지 처리할 필요는 없지만, 당장 추가·업데이트·삭제 처리를 만들 예정이어서 고민 중이다.
그러나 앞으로 데이터 모델이 증가함에 따라 과장해서 실시하는 것은 매우 어렵다. 그래서 다음에 데이터 모델을 증가할 때 모델의 공통된 처리를 한데 모아 각 모델의 실제 적재량을 줄이기 위해 팩스로 보내고 싶다.
처리 측면 처리 요청
이번에는 다음과 같은 요구 처리 절차를 추가한다.
GET /users/:user_id
:user id 경로 매개 변수를 사용하여 사용자 ID로 검색한 사용자 정보를 표시합니다.
요청 처리 프로그램의 처리는 다음과 같다.// GET:/users/:id
func handleUsersGet(c echo.Context) error {
users, err := userDA.FindByUserID(c.Param("user_id"), model.FindFirst)
if err != nil {
return c.Render(http.StatusOK, "error", err)
}
user := users[0]
return c.Render(http.StatusOK, "user", user)
}
templates/user.html{{define "content"}}
<h2>User Detail</h2>
<table>
<tr>
<th width="100px">User ID</th><td>{{.UserID}}</td>
</tr>
<tr>
<th width="100px">Full Name</th><td>{{.FullName}}</td>
</tr>
</table>
{{end}}
경로 매개변수는 Echo에서 echo입니다.Context#Param(<매개 변수 이름>)에서 사용할 수 있습니다.
검색을 위해 가져온 매개변수를 Data Accesser에서 준비한 FindByUserID()에 전달합니다.
결과는 User 정렬로 반환됩니다.
실행 결과
GET /users/:user_id
지정된 사용자 ID가 있으면 사용자 ID와 전체 이름이 표시됩니다.
존재하지 않는 사용자 ID를 지정하면 오류가 표시됩니다.
이번에 사용한 코드에 대해서.
이번에 사용한 코드의 한 세트는 아래의 GiitHub에 놓여 있다.
https://github.com/yoshinoyaussie/golang-website-sample/tree/chapter-6
다음 계획
다음은 이번에 제작된 사용자 정보 참조 메커니즘을 이용하여 로그인 화면과 로그인 사용자만 볼 수 있는 페이지를 제작한다.
Reference
이 문제에 관하여(Go 언어로 웹 사이트를 만들어 보세요(6: JSON에서 사용자 정보를 읽고 참조)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/y_ussie/items/8704ce209704bf191e63
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
[
{
"id": "806d5832-e253-40ca-be80-a00878898c37",
"user_id": "a-chan",
"password": "5f4dcc3b5aa765d61d8327deb882cf99",
"full_name": "Nishiwaki Ayaka"
},
{
"id": "e7bdce91-c9bb-4a29-91f8-750ad4b18bfa",
"user_id": "kashiyuka",
"password": "5f4dcc3b5aa765d61d8327deb882cf99",
"full_name": "Kashino Yuka"
},
{
"id": "b87c826e-429b-4f50-aa35-b99f11a40b08",
"user_id": "nocchi",
"password": "5f4dcc3b5aa765d61d8327deb882cf99",
"full_name": "Omoto Ayano"
}
]
// User はユーザーの情報を表します。
type User struct {
ID ID `json:"id"`
UserID string `json:"user_id"`
Password StringMD5 `json:"password"`
FullName string `json:"full_name"`
}
// 情報をメモリ上に持つためのmap
var users map[ID]User
func (a *UserDataAccessor) decodeJSON() error {
// JSONファイル読み込み
bytes, err := ioutil.ReadFile("data/users.json")
if err != nil {
return err
}
// JSONをデコードする
var records []User
if err := json.Unmarshal(bytes, &records); err != nil {
return err
}
// 結果をmapにセットする
for _, x := range records {
users[x.ID] = x
}
return nil
}
이번에는 다음과 같은 요구 처리 절차를 추가한다.
GET /users/:user_id
:user id 경로 매개 변수를 사용하여 사용자 ID로 검색한 사용자 정보를 표시합니다.
요청 처리 프로그램의 처리는 다음과 같다.
// GET:/users/:id
func handleUsersGet(c echo.Context) error {
users, err := userDA.FindByUserID(c.Param("user_id"), model.FindFirst)
if err != nil {
return c.Render(http.StatusOK, "error", err)
}
user := users[0]
return c.Render(http.StatusOK, "user", user)
}
templates/user.html{{define "content"}}
<h2>User Detail</h2>
<table>
<tr>
<th width="100px">User ID</th><td>{{.UserID}}</td>
</tr>
<tr>
<th width="100px">Full Name</th><td>{{.FullName}}</td>
</tr>
</table>
{{end}}
경로 매개변수는 Echo에서 echo입니다.Context#Param(<매개 변수 이름>)에서 사용할 수 있습니다.검색을 위해 가져온 매개변수를 Data Accesser에서 준비한 FindByUserID()에 전달합니다.
결과는 User 정렬로 반환됩니다.
실행 결과
GET /users/:user_id
지정된 사용자 ID가 있으면 사용자 ID와 전체 이름이 표시됩니다.
존재하지 않는 사용자 ID를 지정하면 오류가 표시됩니다.
이번에 사용한 코드에 대해서.
이번에 사용한 코드의 한 세트는 아래의 GiitHub에 놓여 있다.
https://github.com/yoshinoyaussie/golang-website-sample/tree/chapter-6
다음 계획
다음은 이번에 제작된 사용자 정보 참조 메커니즘을 이용하여 로그인 화면과 로그인 사용자만 볼 수 있는 페이지를 제작한다.
Reference
이 문제에 관하여(Go 언어로 웹 사이트를 만들어 보세요(6: JSON에서 사용자 정보를 읽고 참조)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/y_ussie/items/8704ce209704bf191e63
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이번에 사용한 코드의 한 세트는 아래의 GiitHub에 놓여 있다.
https://github.com/yoshinoyaussie/golang-website-sample/tree/chapter-6
다음 계획
다음은 이번에 제작된 사용자 정보 참조 메커니즘을 이용하여 로그인 화면과 로그인 사용자만 볼 수 있는 페이지를 제작한다.
Reference
이 문제에 관하여(Go 언어로 웹 사이트를 만들어 보세요(6: JSON에서 사용자 정보를 읽고 참조)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/y_ussie/items/8704ce209704bf191e63
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Go 언어로 웹 사이트를 만들어 보세요(6: JSON에서 사용자 정보를 읽고 참조)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/y_ussie/items/8704ce209704bf191e63텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)