진이 이해하려고 넷/http 만진 놈 1.
개시하다
나는 인터넷 회사에 들어온 지 반년이 넘었다.
3개월 전부터 배정된 진에 접촉하기 시작했지만, 업무가 비즈니스 논리의 실현을 중심으로 하기 때문에 근본적인 부분은 전혀 이해할 수 없었다.
기인이가 넷/http 래퍼로서 무엇을 하는지 저도 궁금하기 때문에 각자의 기능이 같은 서버를 적어서 비교하면서 이해해보려고 합니다.
컨디션
OS: Ubuntu 20.04.2 LTS (WSL2)
Go 1.16
Gin 1.7.4
제품
localhost:3000/public/hello
의 GET 요청으로 간단한 json으로 돌아가는 API 서버를 설치하려고 시도했습니다.이번 목적과는 다소 차이가 있지만 목록 구성은 이곳을 참고했다기본 배치.
Gin의 구현
보관소: https://github.com/imsugeno/gin
디렉토리 구조
.
├── README.md
├── cmd
│ └── main.go
├── go.mod
├── go.sum
└── internal
└── handler
├── handler.go
└── route_hello.go
main.gopackage main
import (
"github.com/imsugeno/gin/internal/handler"
)
func main() {
r := handler.NewGinEngin()
r.Run(":3000")
}
handler.gopackage handler
import (
"github.com/gin-gonic/gin"
)
func NewGinEngin() *gin.Engine {
r := gin.Default()
public := r.Group("/public")
{
bindRouteOfHello(public.Group("/hello"))
}
return r
}
route_hello.gopackage handler
import (
"net/http"
"github.com/gin-gonic/gin"
)
func bindRouteOfHello(r *gin.RouterGroup) {
r.GET("", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "hello world",
})
})
}
net/http 설치
보관소: https://github.com/imsugeno/net-http
디렉토리 구조
.
├── README.md
├── cmd
│ └── main.go
├── go.mod
└── internal
└── handler
└── route_public.go
main.gopackage main
import (
"net/http"
"github.com/imsugeno/net-http/internal/handler"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/public/hello", handler.Hello)
http.ListenAndServe(":3000", mux)
}
route_public.gopackage handler
import (
"encoding/json"
"net/http"
)
func Hello(w http.ResponseWriter, r *http.Request) {
message := map[string]string{"message": "hello world"}
jsonMessage, err := json.Marshal(message)
if err != nil {
panic(err.Error())
}
w.Write(jsonMessage)
}
다음 추궁점
나는 다음에 다시 깊이 파고들어 이번에 쏟아져 나오는 의문점을 쓰고 싶다.
gin.RouterGroup
에서 /public
이하의 루트를 정리했지만 구조를 잘 모르기 때문에 네트워크/http에서 실현할 수 없고 전체 경로/public/hello
에서 처리 함수를 결합하여 설치할 수 밖에 없다.처음에 GET로 json에게 답장을 요청했지만 위의
net-http
창고의 실현은 HTTP 요청 방법에 따라 이루어지지 않았고 POST와 PUT200 OK
는 모두 답장을 했다.gin.RouterGroup
도 잘해서 루트의 화제로 이해한다.gin.Context
의 작업넷/http를 통해 처리 프로그램과 처리 프로그램 함수
http.ResponseWriter
와 *http.Request
에 전달되는 구조체가 있다는 것을 알지만 그 외에 현장에서 보유하고 있는 queryCache
는 무엇일까.말하자면
gin.Engine
은 무엇입니까?뭐?
Reference
이 문제에 관하여(진이 이해하려고 넷/http 만진 놈 1.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/gesu/articles/sugarticle-1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)