Создание веб-приложения Go и React
В этом руководстве мы рассмотрим процесс создания веб-приложения с использованием языка программирования Go для серверной части и React для веб-интерфейса. К концу этого руководства вы получите базовое представление о том, как создать веб-приложение с нуля, включая настройку внутреннего сервера, создание REST API, интеграцию с базой данных, создание внешнего интерфейса и соединение внешнего и внутреннего интерфейса вместе.
Предварительные условия
Прежде чем приступить к работе с этим руководством, рекомендуется иметь базовое представление о Go и React. Также будет полезно знание HTML, CSS и JavaScript. Кроме того, вам потребуется установить следующее программное обеспечение:
- Go (>= 1.16)
- Node.js (>= 12.0.0)
- npm (>= 6.0.0)
- PostgreSQL (>= 9.0)
Настройка проекта
Для начала создадим новый каталог для нашего проекта и настроим необходимую структуру папок:
- Создайте новый каталог для вашего проекта:
$ mkdir go-react-app $ cd go-react-app
- Инициализируйте модуль Go:
$ go mod init github.com/your-username/go-react-app
- Создайте
server
каталог внутри каталога проекта:
$ mkdir server $ cd server
- Инициализируйте новый модуль Go для сервера:
$ go mod init github.com/your-username/go-react-app/server
- Создайте
main.go
файл вserver
каталоге:
$ touch main.go
Бэкэнд-разработка
Создание REST API
Теперь давайте создадим простой REST API, используя встроенный net/http
пакет Go:
- Откройте
main.go
файл и импортируйте необходимые пакеты:
package main import ( "encoding/json" "log" "net/http" )
- Определите
User
структуру для представления нашей модели данных:
type User struct { ID int `json:"id"` Name string `json:"name"` Email string `json:"email"` }
- Создайте функцию-обработчик HTTP для обработки маршрута выборки всех пользователей:
func getUsers(w http.ResponseWriter, r *http.Request) { users := []User{ {ID: 1, Name: "Alice", Email: "alice@example.com"}, {ID: 2, Name: "Bob", Email: "bob@example.com"}, } json.NewEncoder(w).Encode(users) }
- Настройте основную функцию сервера для обработки маршрутов API:
func main() { http.HandleFunc("/users", getUsers) log.Fatal(http.ListenAndServe(":8000", nil)) }
- Запустите сервер, выполнив следующую команду в
server
каталоге:
$ go run main.go
- Откройте веб-браузер и посетите
http://localhost:8000/users
. Вы должны увидеть ответ JSON, содержащий данные пользователей.
Интеграция базы данных
В этом разделе мы интегрируем PostgreSQL в качестве базы данных для нашего веб-приложения:
- Установите драйвер PostgreSQL для Go:
$ go get github.com/lib/pq
- Обновите
getUsers
функцию для получения данных из базы данных PostgreSQL:
import ( "database/sql" _ "github.com/lib/pq" ) const ( host = "localhost" port = 5432 user = "your-username" password = "your-password" dbname = "your-dbname" ) func getUsers(w http.ResponseWriter, r *http.Request) { connStr := fmt.Sprintf("host=%s port=%d user=%s "+ "password=%s dbname=%s sslmode=disable", host, port, user, password, dbname) db, err := sql.Open("postgres", connStr) if err != nil { log.Fatal(err) } defer db.Close() rows, err := db.Query("SELECT id, name, email FROM users") if err != nil { log.Fatal(err) } defer rows.Close() users := []User{} for rows.Next() { var user User err := rows.Scan(&user.ID, &user.Name, &user.Email) if err != nil { log.Fatal(err) } users = append(users, user) } json.NewEncoder(w).Encode(users) }
- Перезапустите сервер и посетите
http://localhost:8000/users
. Теперь данные будут получены из базы данных PostgreSQL.
Фронтенд-разработка
Настройка React
Давайте настроим интерфейс нашего приложения с помощью React:
- Вернитесь в корневой каталог проекта:
$ cd ..
- Инициализируйте новый проект React:
$ npx create-react-app client
- Перейдите в
client
каталог:
$ cd client
- Запустите сервер разработки React:
$ npm start
- Откройте веб-браузер и посетите
http://localhost:3000
. Вы должны увидеть страницу приветствия React по умолчанию.
Компоненты пользовательского интерфейса
Теперь мы создадим некоторые компоненты пользовательского интерфейса, используя React, для отображения данных пользователей, полученных из серверной части:
- Создайте новый файл
Users.js
внутриsrc
каталога:
$ touch src/Users.js
- Добавьте в файл следующий код
Users.js
:
import React, { useEffect, useState } from 'react'; function Users() { const [users, setUsers] = useState([]); useEffect(() => { fetch('/users') .then((response) => response.json()) .then((data) => setUsers(data)); }, []); return ( <div> <h1>Users</h1> <ul> {users.map((user) => ( <li key={user.id}>{user.name}</li> ))} </ul> </div> ); } export default Users;
- Откройте
src/App.js
файл и замените существующий код следующим:
import React from 'react'; import Users from './Users'; function App() { return ( <div className="App"> <Users /> </div> ); } export default App;
- Перезапустите сервер разработки React, если он не был перезапущен автоматически. Посетите
http://localhost:3000
, и вы увидите список имен пользователей, полученных из серверной части, отображаемый на экране.
Соединение фронтенда и бэкенда
Чтобы соединить фронтенд и бэкенд, мы будем проксировать API-запросы с сервера разработки React на сервер Go:
- Откройте
package.json
файл вclient
каталоге. - Добавьте следующую строку в файл внутри
scripts
раздела:
"proxy": "http://localhost:8000"
- Сохраните
package.json
файл и перезапустите сервер разработки React. - Теперь интерфейсный интерфейс может отправлять запросы API на внутренний сервер, не беспокоясь о проблемах CORS. Обновите URL-адрес сервера в
getUsers
функции вmain.go
файле/users
вместо абсолютного URL-адреса. - Перезапустите сервер Go и сервер разработки React.
Развертывание
Чтобы развернуть веб-приложение, мы можем создать интерфейс React и запустить сервер Go на сервере производственного уровня:
- Создайте интерфейс React, выполнив следующую команду внутри
client
каталога:
$ npm run build
- Добавьте в
main.go
файл следующий код для обслуживания статических файлов, созданных сборкой React:
import ( "log" "net/http" ) func main() { // ... existing code ... fs := http.FileServer(http.Dir("../client/build")) http.Handle("/", fs) log.Fatal(http.ListenAndServe(":8000", nil)) }
- Соберите и запустите сервер Go:
$ go build $ ./server
- Посетите
http://localhost:8000
, чтобы увидеть развернутое веб-приложение.
Заключение
В этом уроке мы создали веб-приложение, используя Go для бэкэнда и React для фронтенда. Мы рассмотрели создание REST API, интеграцию с базой данных, настройку React, создание компонентов пользовательского интерфейса и соединение внешнего и внутреннего интерфейса.
Это руководство лишь поверхностно коснулось того, чего можно достичь с помощью Go и React, но оно послужило хорошей отправной точкой для создания веб-приложений. Продолжайте исследовать и экспериментировать, чтобы раскрыть весь потенциал этих мощных технологий.