Go 프로 그래 밍 기초 4-Http 서버
6578 단어 Go프로 그래 밍 기초HttpGO
package main
import(
"net/http"
"log"
)
func main(){// "/",
http.HandleFunc("/",func(w http.ResponseWriter,r *http.Request){
w.Write([]byte("Hello,this is version 1!"))
})
http.HandleFunc("/bye",sayBye)
log.Println("Starting server ... v1")
log.Fatal(http.ListenAndServe(":4000",nil))
}
func sayBye( w http.ResponseWriter,r *http.Request){
w.Write([]byte("Bye bye,this is version 1!"))
}
go run test.go
2018/07/09 14:32:08 Starting server ... v1
브 라 우 저 액세스 열기:http://localhost:4000/ 브 라 우 저 방문 열기:http://localhost:4000/bye
어떻게 mux 사용자 정의 ServeHTTP 를 사용 하여 http server 를 실현 합 니까?
package main
import(
"net/http"
"log"
)
func main(){
mux := http.NewServeMux()
mux.Handle("/",&myHandler{})
mux.HandleFunc("bye",sayBye)
log.Println("Starting server ... v2")
log.Fatal(http.ListenAndServe(":4000",mux))
}
type myHandler struct {}
func (*myHandler) ServeHTTP(w http.ResponseWriter,r *http.Request){
w.Write([]byte("Hello,this is version 2!"))
}
func sayBye(w http.ResponseWriter,r *http.Request){
w.Write([]byte("Bye bye,this is version 2!"))
}
go run test.go
2018/07/09 15:37:35 Starting server ... v2
브 라 우 저 액세스 열기:http://localhost:4000/ 브 라 우 저 방문 열기:http://localhost:4000/bye
브 라 우 저 액세스 열기:http://localhost:4000/abcdef 기본 값 도 여기에 일치 합 니 다
일치 하지 않 는 모든 경로 가"/"경로 와 일치 합 니 다.
package main
import(
"net/http"
"log"
)
func main(){
mux := http.NewServeMux()
mux.Handle("/",&myHandler{}) //
mux.HandleFunc("bye",sayBye)
log.Println("Starting server ... v2")
log.Fatal(http.ListenAndServe(":4000",mux))
}
type myHandler struct {}
func (*myHandler) ServeHTTP(w http.ResponseWriter,r *http.Request){
w.Write([]byte("Hello v2,the request url is:"+ r.URL.String()))
}
func sayBye(w http.ResponseWriter,r *http.Request){
w.Write([]byte("Bye bye,this is version 2!"))
}
go run test.go
2018/07/09 15:50:23 Starting server ... v2
브 라 우 저 액세스 열기:http://localhost:4000/nihao 기본 값 도/여기에 일치 합 니 다
서버 정 보 를 어떻게 사용자 정의 합 니까?
import(
"net/http"
"log"
"time"
)
func main(){
server :=&http.Server{
Addr: ":4000",
WriteTimeout:2 * time.Second,
}
mux := http.NewServeMux()
mux.Handle("/",&myHandler{}) //
mux.HandleFunc("bye",sayBye)
server.Handler=mux
log.Println("Starting server ... v2")
log.Fatal(server.ListenAndServe)
}
type myHandler struct {}
func (*myHandler) ServeHTTP(w http.ResponseWriter,r *http.Request){
w.Write([]byte("Hello v2,the request url is:"+ r.URL.String()))
}
func sayBye(w http.ResponseWriter,r *http.Request){
w.Write([]byte("Bye bye,this is version 2!"))
}
go run test.go
2018/07/09 15:57:46 Starting server ... v2
2018/07/09 15:57:46 0x120ef70
:http://localhost:4000
클 라 이언 트 가 자발적으로 끊 을 수 있 습 니 다.
package main
import(
"net/http"
"log"
"time"
"os"
"os/signal"
)
func main(){
server :=&http.Server{
Addr: ":4000",
WriteTimeout:4 * time.Second,
}
quit := make(chan os.Signal)
signal.Notify(quit,os.Interrupt)
mux := http.NewServeMux()
mux.Handle("/",&myHandler{}) //
mux.HandleFunc("bye",sayBye)
server.Handler=mux
go func(){
어떻게 서로 다른 경로 의 퍼 가기 를 실현 합 니까?
package main
import (
"log"
"net/http"
"time"
)
// map,
var mux map[string]func(http.ResponseWriter, *http.Request)
func main() {
server := http.Server{
Addr: ":8090",
Handler: &myHandler{},
ReadTimeout: 5 * time.Second,
}
// ,/hello /bye , func
mux = make(map[string]func(http.ResponseWriter, *http.Request)) //
mux["/hello"] = sayHello
mux["/bye"] = sayBye
err := server.ListenAndServe()
if err != nil {
log.Fatal(err)
}
}
type myHandler struct{}
func (*myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if h, ok := mux[r.URL.String()]; ok { //map , , , ,ok=true
h(w, r)
return
}
}
func sayHello(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello,this is version 3!"))
}
func sayBye(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Bye,this is version 4!"))
}
go run test.go 브 라 우 저 접근:http://localhost:8090/hello돌아 가기:안녕하세요,버 전 3 입 니 다!브 라 우 저 접근:http://localhost:8090/bye돌아 가기:Bye,this is version 4!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어의 끝 대기 열 tailqquue 와 list 의 구조 정의 와 조작 은 모두 'sys / quue. h' 에서 이 루어 졌 고 주로 다음 네 가지 데이터 구 조 를 정의 했다. 단 방향 목록 (single - linked lists) 단 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.