본문 바로가기
GO Lang

GO_웹 제작(1)

by u0jin 2020. 6. 7.

오픈소스들이 거의 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) 딸기잼 (객체) + 바른다 (외부기능) => 빵 (객체)

    복숭아잼(객체) + 바른다 (외부기능) => 빵 (객체)

바른다 = 관계 

'GO Lang' 카테고리의 다른 글

GO_웹 제작(4)  (0) 2020.06.23
GO_웹 제작(3)  (0) 2020.06.17
GO_웹 제작(Test 환경 구축)  (0) 2020.06.13
GO_웹 제작(2)  (0) 2020.06.08
GO_ 기본 구조  (0) 2020.06.06

댓글