В этом посте мы создадим простой HTTP-сервер в Go, выполнив несколько простых шагов. Прежде чем начать, позвольте мне дать вам краткое введение в Go.
Что такое го?
Go — это язык программирования с открытым исходным кодом, который чувствителен к регистру и статически типизирован с синтаксисом, аналогичным синтаксису языка C, созданного в Google в 2007 году. Он компилируется очень быстро, поддерживает параллелизм на уровне языка и обеспечивает сборку мусора, безопасность типов, динамическую возможность ввода, многие расширенные встроенные типы, такие как массивы переменной длины и карты значений ключей, хотя нет поддержки универсального программирования, наследования типов, перегрузки методов или операторов, арифметики указателей и утверждений.
Теперь давайте начнем с настройки среды для запуска нашего первого HTTP-сервера, выполнив следующие шаги:
Шаг 1: Скачайте и распакуйте Go в любой каталог, для меня это golang в каталоге / Users / ArpitAggarwal / следующим образом:
|
1
2
3
4
|
$ mkdir golang$ cd golang$ wget https://storage.googleapis.com/golang/go1.8.3.darwin-amd64.tar.gz$ tar -xvzf go1.8.3.darwin-amd64.tar.gz |
Шаг 2: Обновите путь с помощью GOROOT , GOPATH и GOBIN следующим образом:
|
1
2
3
4
|
$ export GOROOT=/Users/ArpitAggarwal/golang/go$ export GOPATH=$GOROOT/src$ export GOBIN=$GOROOT/bin$ export PATH=$PATH:$GOPATH:$GOBIN |
GOROOT относится к каталогу установки go.
GOPATH ссылается на наш каталог рабочей области go или где выполняется go build.
GOBIN относится к каталогу, куда идут генерации исполняемых двоичных файлов.
Шаг 3: Проверьте, правильно ли установлен GOPATH на Bash , выполнив следующую команду:
|
1
|
$ env | grep -E "^GO" |
Шаг 4: Создайте каталог в рабочей области для хранения исходного кода:
|
1
|
$ mkdir -p $GOPATH/github.com/arpitaggarwal |
Шаг 5: Перейдите в каталог, который мы создали на предыдущем шаге, и создайте в нем файл с именем webserver.go , как показано ниже:
|
1
2
|
$ cd $GOPATH/github.com/arpitaggarwal$ touch webserver.go |
Скопируйте следующий код Go:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
package mainimport ( "fmt" "log" "net/http")func helloWorld(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello World!") // send data to client side}func main() { http.HandleFunc("/", helloWorld) // set router err := http.ListenAndServe(":8080", nil) // set listen port if err != nil { log.Fatal("Error while starting GO http server on port - 8080 : ", err) //log error and exit in case of error at server boot up }} |
Давайте разберемся, что означает каждая строка.
основной пакет — определяет имя пакета программы.
import («fmt», «log», «net / http») — это команда препроцессора, которая указывает компилятору Go включать все файлы из пакетов fmt , log и net / http .
func helloWorld (w http.ResponseWriter, r * http.Request) — это функция go.
main () — это основная функция, с которой начинается выполнение программы.
Шаг 6: Установите webserver.go с помощью инструмента go следующим образом:
|
1
|
$ go install $GOPATH/github.com/arpitaggarwal/webserver.go |
Выше команды скомпилируйте webserver.go и сгенерируйте его исполняемый двоичный файл в $ GOROOT / bin или GOBIN
Шаг 7: Запустите веб-сервер, перейдя в каталог golang , следующим образом:
|
1
2
|
$ cd golang$ ./go/bin/webserver |
Теперь откройте http: // localhost: 8080 / в браузере или выполните команду:
|
1
|
curl http://localhost:8080 |
покажет нам «Hello World!» как ответ.
Шаг 8: При желании мы можем запустить двоичный файл в фоновом режиме, используя команду nohup , следующим образом:
|
1
2
|
$ cd golang$ nohup ./go/bin/webserver &; |
Полный исходный код размещен на github
| Ссылка: | Создание HTTP-сервера в Go от нашего партнера JCG |