Une application Web qui ne fait que Hello World avec le package net / http de Go

Éveil de Go

Avec des connaissances de bas niveau, vous serez un ingénieur autonome! Je l'ai envoyé à moi-même qui était enthousiaste à l'idée d'apprendre le langage C mais je ne trouvais rien de amusant.

Personnage

Si vous souhaitez créer une application Web, je pense que Node et Rails suffisent pour le moment. Pour les applications de bureau, utilisez Electron. Ceux qui veulent utiliser Go ou quelque chose comme une application de terminal ou un système qui utilise les fonctions du système d'exploitation (le Docker et GitHub CLI récemment populaires sont également fabriqués par Go, donc si vous pouvez l'utiliser, vous pouvez jouer).

Objectif de cet article

Pour décider si vous voulez apprendre Go, créons une application Web simple (allez-y et dites Hello World).

Environnement de développement

Je ne savais pas si je pouvais faire confiance à Go, alors je le ferai avec Docker pour ne pas polluer l'environnement. Si c'est intéressant, j'aimerais voir l'intérieur avec un développeur, donc je vais construire l'environnement localement.

La structure des répertoires est la suivante. Placez le fichier go dans le répertoire compileFile et créez-le.

compileFile (annuaire)
Dockerfile
docker-compose.yml
# Dockerfile
FROM golang:latest
RUN mkdir -p /go/src

docker-compose.yml


version: '3'
services:
  go:
    build: .
    ports:
      - "8080:8080"
    volumes:
      - ./compileFile:/go/src
    working_dir: /go/src

Entrez dans le conteneur et vérifiez la commande go. Notez que vous ne pouvez pas connecter 8080 ports sauf si vous spécifiez --service-ports. Assurez-vous que vous pouvez transférer correctement avec docker ps.

$ docker-compose run --service-ports go /bin/bash
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
af4f9c066ecd        golean_go           "/bin/bash"         7 seconds ago       Up 2 seconds        0.0.0.0:8080->8080/tcp   golean_go_run_a79a836040ab

Pour l'instant, essayez de taper «go» pour voir quelles commandes vous pouvez utiliser.

Go is a tool for managing Go source code.

Usage:

	go <command> [arguments]

The commands are:

	bug         start a bug report
	build       compile packages and dependencies
	clean       remove object files and cached files
	doc         show documentation for package or symbol
	env         print Go environment information
	fix         update packages to use new APIs
	fmt         gofmt (reformat) package sources
	generate    generate Go files by processing source
	get         add dependencies to current module and install them
	install     compile and install packages and dependencies
	list        list packages or modules
	mod         module maintenance
	run         compile and run Go program
	test        test packages
	tool        run specified go tool
	version     print Go version
	vet         report likely mistakes in packages

Use "go help <command>" for more information about a command.

Additional help topics:

	buildconstraint build constraints
	buildmode       build modes
	c               calling between Go and C
	cache           build and test caching
	environment     environment variables
	filetype        file types
	go.mod          the go.mod file
	gopath          GOPATH environment variable
	gopath-get      legacy GOPATH go get
	goproxy         module proxy protocol
	importpath      import path syntax
	modules         modules, module versions, and more
	module-get      module-aware go get
	module-auth     module authentication using go.sum
	module-private  module configuration for non-public modules
	packages        package lists and patterns
	testflag        testing flags
	testfunc        testing functions

Use "go help <topic>" for more information about that topic.

go build`` go run`` go fmt sera probablement utilisé dans un proche avenir.

Création de projet

Je voulais comprendre Go à partir d'une application Web familière. Écrivez un programme qui affiche Hello World sur le navigateur tout en examinant l'exemple de code.

server/main.go


package main

import "io"
import "net/http"

func mainHandler(w http.ResponseWriter, req *http.Request) {
	io.WriteString(w, `Hello World!!!`)
}

func main(){
	http.HandleFunc("/main", mainHandler)
	http.ListenAndServe(":8080", nil)
}

Vous pouvez le formater avec une seule commande, alors construisez-le après le formatage! Au fait, je suis en colère s'il y a une position de saut de ligne ou un paquet inutilisé, peut-être que le linter fonctionne également au moment de la construction.

Une fois construit, un fichier exécutable avec le nom de répertoire contenant le fichier go a été créé.

$ go fmt
$ go build
$ ls
server main.go
$ ./server

Lorsque j'ai visité http: // localhost: 8080 / main, j'ai pu confirmer Hello World!

スクリーンショット 2020-10-13 1.23.10.png

À propos, si vous souhaitez l'exécuter sur Mac, vous pouvez le compiler pour Mac ci-dessous.

$ GOOS=darwin GOARCH=amd64 go build

package net / http

Commençons par un endroit facile à comprendre. Il semble que vous puissiez configurer un serveur avec cela. Il semble que le premier argument est la spécification du port et le second argument est le Handler, et dans le cas de nil, le DefaultServeMux par défaut est utilisé.

http.ListenAndServe(":8080", nil)

Qu'est-ce que DefaultServeMux?

En lisant la documentation, vous trouverez les éléments suivants:

HandleFunc registers the handler function for the given pattern in the DefaultServeMux.
The documentation for ServeMux explains how patterns are matched.

Il dit que vous pouvez enregistrer un gestionnaire correspondant au modèle d'URL dans DefaultServerMux avec HandleFunc. Pensez-y comme quelque chose de routage.

Ainsi, ce qui suit peut être lu comme l'exécution du traitement de mainHandler après avoir accédé à / main.

http.HandleFunc("/main", mainHandler)

Le paquet io sait ce que vous faites, je vais donc le laisser.

document Package http

Présenté à Local

Facile à entrer avec une infusion.

$ brew install go
$ go version
go version go1.15.3 darwin/amd64

REPL est également inclus. Cela ne fonctionnait pas avec gore v0.5.0, donc je laisse tomber la version.

#Vous pouvez le faire et l'installer, mais vous n'en aurez peut-être pas besoin.
$ export GO111MODULE=on
$ go get github.com/motemen/gore/cmd/[email protected]
$ gore -version
gore 0.4.0 (rev: HEAD/go1.15.3)

Si vous l'installez par erreur, vous pouvez le supprimer ci-dessous.

$ go clean -i github.com/motemen/gore/cmd/gore

À propos, avec la v0.5.0, le message d'erreur suivant apparaît.

gore: could not load 'fmt' package: err: exit status 1: stderr: build flag -mod=mod only valid when using modules

Maintenant que l'environnement local est en place, il ne vous reste plus qu'à jouer.

Sommaire

Je souhaite utiliser Go pour le développement Web! Je ne me sens pas comme ça, mais au moins je l'ai trouvé plus amusant que C! Je veux créer une application de terminal ou quelque chose comme ça. Pour le moment, afin d'apprendre à utiliser Go, j'ai pensé essayer de le créer à partir d'une simple application Web en utilisant un framework ou quelque chose.

Recommended Posts

Une application Web qui ne fait que Hello World avec le package net / http de Go
Créer un serveur "Hello World" (HTTP) dans Tornado
Jouez comme une application Web avec ipywidgets
Créez une application Web qui peut être facilement visualisée avec Plotly Dash
Démonisez une application Web Python avec Supervisor
Créez une application Web simple avec Flask
Un monde typé qui commence par Python
Un article qui essaie juste une petite requête HTTP avec la commande curl
Créez une application Hello World avec un seul fichier avec django
Hello World avec un serveur Web simple qui suit WSGI (Web Server Gateway Interface) en Python
J'ai créé une application de notification de nouvelles en ligne avec Python
Créer un serveur Web en langage Go (net / http) (1)
Déployez des applications Web en temps réel avec Swampdragon x Apache
Déployer une application Web créée avec Streamlit sur Heroku
bonjour le monde avec ctypes
Bonjour le monde avec Docker
Bonjour le monde sur flacon
Comment déployer une application Web créée avec Flask sur Heroku
Créez une application Web qui reconnaît les nombres avec un réseau neuronal
Hello World avec Google App Engine (Java 8) + API Servlet 3.1 + Gradle
(Échec) Déployer une application Web créée avec Flask avec heroku
Tornado - Créons une API Web qui renvoie facilement JSON avec JSON
Créez une API Web capable de fournir des images avec Django
Hello World avec Google App Engine (Java 11) + Spring Boot + Gradle