GO_웹 제작(1)
오픈소스들이 거의 GO언어로 만들어지고 있고, 해석하다보니 재밌는것 같아서 시작하게 되었다.
GO는 백엔드에 특화된 언어로 보이며, 쉽게 고성능 서버를 만들수 있다.
package main
import(
"fmt"
"net/http"
)
type fooHandler struct{}
func (f *fooHandler) ServeHTTP(w http.ResponseWriter,r *http.Request){
fmt.Fprint(w,"handler_3")
}
func main() {
http.HandleFunc("/", func (w http.ResponseWriter , r *http.Request){
fmt.Fprint(w, "handler_1")
})
http.HandleFunc("/bar",func (w http.ResponseWriter , r *http.Request){
fmt.Fprint(w,"handler_2")
})
http.Handle("/foo", &fooHandler{})
http.ListenAndServe(":3000",nil)
}
로컬에서 돌릴때, 핸들러를 구현해보는것이 오늘의 목표다.
코드를 보며 하나씩 해석해보면,
1. http.HandleFunc("/", func (w http.ResponseWriter , r *http.Request){
request가 왔을때, 어떤 일을 할건지 그 핸들러를 등록하는 func이다.
도메인이 있을때 "/ " 첫번째 경로 - 인덱스 페이지 : 정해진 형태의 func 이다.
http://localhost:3000/ 에서 마지막에 붙는 / 를 뜻한다.
2. fmt.Fprint(w, "handler_1")
write 에 "handler_1" 을 프린트 하라는것을 뜻한다.
3. http.HandleFunc("/bar",func (w http.ResponseWriter , r *http.Request){
http://localhost:3000/bar 에서 마지막에 붙는 /bar 를 뜻한다
=> handler 를 function 형태로 직접 등록할때, HandleFunc 를 사용한다. (* Handler 1, 2 가 여기에 해당된다. )
4. type fooHandler struct{}
= 인스턴스를 만들어냄
5. func (f *fooHandler) ServeHTTP(w http.ResponseWriter,r *http.Request){
= 인스턴스 구현할때는 인터페이스를 구현함, ServeHTTP 라는 인터페이스를 구현함
6. http.Handle("/foo", &fooHandler{})
= 인스턴스형태로 등록
7. http.ListenAndServe(":3000",nil)
= 웹서버 구동
interface
= 서로 상호작용하는 접촉 면 = 객체간 상호관계를 따로 정의한것.
(* UI = user interface 유저와의 상호작용)
inter = 상호작용
객체 = object = 상태+기능
기능 (function ,method) - 외부로 공개되는 기능/ 내부 기능 이 존재함
외부에서 호출되는 메소드 - 바깥에서 어떤걸 부름=> 이 객체와 외부의 관계를 나타냄
관계 = 인터페이스
객체는 상태와 기능으로 이루어져있는데, 여기서 인터페이스는 기능만을 말한다.
다시말해, 상태와 기능의 의존성/ 종속성 을 떼어냄 ==> 확장성을 얻게됨
* 확장성
ex) 딸기잼 (객체) + 바른다 (외부기능) => 빵 (객체)
복숭아잼(객체) + 바른다 (외부기능) => 빵 (객체)
바른다 = 관계