четверг, 30 января 2020 г.

Функции пакета net/http, примеры

Функция Handle

func Handle(pattern string, handler Handler)

Handle регистрирует обработчик для данного шаблона в DefaultServeMux. Пример:

package main

import (
  "fmt"
  "log"
  "net/http"
  "sync"
)

type countHandler struct {
  mu sync.Mutex // guards n
  n  int
}

func (h *countHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
  h.mu.Lock()
  defer h.mu.Unlock()
  h.n++
  fmt.Fprintf(w, "count is %d\n", h.n)
}

func main() {
  http.Handle("/count", new(countHandler))
  log.Fatal(http.ListenAndServe(":8080", nil))
}

Функция HandleFunc

func HandleFunc(pattern string, handler func(ResponseWriter, *Request))

HandleFunc регистрирует функцию-обработчик для данного шаблона в DefaultServeMux. Привер:

package main

import (
  "io"
  "log"
  "net/http"
)

func main() {
  h1 := func(w http.ResponseWriter, _ *http.Request) {
    io.WriteString(w, "Hello from a HandleFunc #1!\n")
  }
  h2 := func(w http.ResponseWriter, _ *http.Request) {
    io.WriteString(w, "Hello from a HandleFunc #2!\n")
  }

  http.HandleFunc("/", h1)
  http.HandleFunc("/endpoint", h2)

  log.Fatal(http.ListenAndServe(":8080", nil))
}

Функция ListenAndServe

func ListenAndServe(addr string, handler Handler) error

ListenAndServe прослушивает адрес сетевого адреса TCP, а затем вызывает Serve с обработчиком для обработки запросов на входящие соединения. Принятые соединения настраиваются для включения поддержки активности TCP.

Обработчик обычно равен nil, и в этом случае используется DefaultServeMux.

ListenAndServe всегда возвращает ненулевую ошибку.

Пример:

package main

import (
  "io"
  "log"
  "net/http"
)

func main() {
  // Hello world, the web server

  helloHandler := func(w http.ResponseWriter, req *http.Request) {
    io.WriteString(w, "Hello, world!\n")
  }

  http.HandleFunc("/hello", helloHandler)
  log.Fatal(http.ListenAndServe(":8080", nil))
}

Функция ListenAndServeTLS

func ListenAndServeTLS(addr, certFile, keyFile string, handler Handler) error

ListenAndServeTLS действует идентично ListenAndServe, за исключением того, что она ожидает HTTPS-соединений. Кроме того, должны быть предоставлены файлы, содержащие сертификат и соответствующий закрытый ключ для сервера. Если сертификат подписан центром сертификации, certFile должен быть объединением сертификата сервера, любых промежуточных продуктов и сертификата CA.

package main

import (
  "io"
  "log"
  "net/http"
)

func main() {
  http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
    io.WriteString(w, "Hello, TLS!\n")
  })

  // Можно использовать generate_cert.go в crypto/tls 
  // чтобы сгенерировать cert.pem и key.pem.
  log.Printf("About to listen on 8443. Go to https://127.0.0.1:8443/")
  err := http.ListenAndServeTLS(":8443", "cert.pem", "key.pem", nil)
  log.Fatal(err)
}


Читайте также:


Комментариев нет:

Отправить комментарий