GO Lang

GO_웹 제작(1)

u0jin 2020. 6. 7. 00:10

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

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

바른다 = 관계