Eine Web-App, die Hello World nur mit dem net / http-Paket von Go ausführt

Erwachen von Go

Mit geringen Kenntnissen sind Sie ein autarker Ingenieur! Ich schickte es mir selbst, der begeistert die C-Sprache lernte, aber keinen Spaß fand.

Persona

Wenn Sie eine Web-App erstellen möchten, sind Node und Rails im Moment meiner Meinung nach ausreichend. Verwenden Sie für Desktop-Apps Electron. Diejenigen, die Go oder etwas wie eine Terminal-App oder ein System verwenden möchten, das Betriebssystemfunktionen verwendet (Docker und GitHub CLI, die heutzutage beliebt sind, werden ebenfalls von Go hergestellt. Wenn Sie sie also verwenden können, können Sie spielen).

Zweck dieses Artikels

Um zu entscheiden, ob Sie Go lernen möchten, erstellen wir eine einfache Web-App (gehen Sie einfach dorthin und sagen Sie Hallo Welt).

Entwicklungsumgebung

Ich wusste nicht, ob ich Go vertrauen kann, also mache ich es mit Docker, um die Umwelt nicht zu verschmutzen. Wenn es interessant ist, würde ich gerne mit einem Entwickler das Innere sehen, damit ich die Umgebung lokal aufbauen kann.

Die Verzeichnisstruktur ist wie folgt. Legen Sie die go-Datei im Verzeichnis compileFile ab und erstellen Sie sie.

compileFile (Verzeichnis)
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

Gehen Sie in den Container und überprüfen Sie den Befehl go. Beachten Sie, dass Sie 8080-Ports nur verbinden können, wenn Sie --service-ports angeben. Stellen Sie sicher, dass Sie mit docker ps richtig weiterleiten können.

$ 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

Versuchen Sie zunächst, "go" einzugeben, um zu sehen, welche Befehle Sie verwenden können.

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 wird voraussichtlich in naher Zukunft verwendet.

Projekterstellung

Ich wollte Go von einer vertrauten Web-App aus verstehen. Schreiben Sie ein Programm, das Hello World im Browser anzeigt, während Sie sich den Beispielcode ansehen.

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)
}

Sie können es mit einem Befehl formatieren, also erstellen Sie es nach der Formatierung! Übrigens bin ich wütend, dass der Linter auch zum Zeitpunkt des Builds funktioniert und es Zeilenumbruchpositionen und nicht verwendete Pakete gibt.

Beim Erstellen wurde eine ausführbare Datei mit dem Verzeichnisnamen erstellt, der die go-Datei enthält.

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

Als ich http: // localhost: 8080 / main besuchte, konnte ich Hello World!

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

Übrigens, wenn Sie es auf einem Mac ausführen möchten, können Sie es unten für einen Mac kompilieren.

$ GOOS=darwin GOARCH=amd64 go build

net / http-Paket

Beginnen wir an einem leicht verständlichen Ort. Es scheint, dass Sie damit einen Server einrichten können. Es scheint, dass das erste Argument die Portspezifikation und das zweite Argument der Handler ist, und im Fall von nil wird der Standardwert DefaultServeMux verwendet.

http.ListenAndServe(":8080", nil)

Was ist DefaultServeMux?

Während Sie die Dokumentation lesen, finden Sie Folgendes:

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

Es heißt, dass Sie einen Handler, der dem URL-Muster in DefaultServerMux entspricht, bei HandleFunc registrieren können. Betrachten Sie es als etwas Routing.

Folgendes kann also als Ausführung der Verarbeitung von mainHandler nach dem Zugriff auf / main gelesen werden.

http.HandleFunc("/main", mainHandler)

Das io-Paket weiß, was Sie tun, also lasse ich es.

document Package http

Einführung in Local

Einfach mit Gebräu zu betreten.

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

REPL ist ebenfalls enthalten. Es hat nicht mit Gore v0.5.0 funktioniert, also lasse ich die Version fallen.

#Sie können dies tun und installieren, benötigen es jedoch möglicherweise nicht.
$ export GO111MODULE=on
$ go get github.com/motemen/gore/cmd/[email protected]
$ gore -version
gore 0.4.0 (rev: HEAD/go1.15.3)

Wenn Sie es versehentlich installieren, können Sie es unten löschen.

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

Übrigens wird mit v0.5.0 die folgende Fehlermeldung angezeigt.

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

Jetzt, da die lokale Umgebung vorhanden ist, müssen Sie nur noch spielen.

Zusammenfassung

Ich möchte Go für die Webentwicklung verwenden! Ich fühle mich nicht so, aber zumindest fand ich es lustiger als C! Ich möchte eine Terminal-App oder so machen. Um zu lernen, wie man Go benutzt, dachte ich vorerst, ich würde versuchen, es aus einer einfachen Webanwendung unter Verwendung eines Frameworks oder so etwas zu machen.

Recommended Posts

Eine Web-App, die Hello World nur mit dem net / http-Paket von Go ausführt
Erstellen Sie in Tornado einen HTTP-Server (Hello World)
Spielen Sie wie eine Web-App mit ipywidgets
Erstellen Sie eine Web-App, die mit Plotly Dash einfach visualisiert werden kann
Dämonisieren Sie eine Python-Webanwendung mit Supervisor
Erstellen Sie eine einfache Web-App mit Flasche
Eine typisierte Welt, die mit Python beginnt
Ein Artikel, der nur eine kleine HTTP-Anfrage mit dem Befehl curl versucht
Erstellen Sie mit Django eine Hallo-Welt-Anwendung mit nur einer Datei
Hello World mit einem einfachen Webserver, der WSGI (Web Server Gateway Interface) in Python folgt
Ich habe mit Python eine App für die Benachrichtigung über Netznachrichten erstellt
Erstellen Sie einen Webserver in der Sprache Go (net / http) (1)
Stellen Sie Echtzeit-Webanwendungen mit swampdragon x apache bereit
Stellen Sie eine mit Streamlit erstellte Web-App für Heroku bereit
Hallo Welt mit ctypes
Hallo, Welt mit Docker
Hallo Welt auf Flasche
So stellen Sie eine mit Flask erstellte Web-App für Heroku bereit
Erstellen Sie eine Web-App, die Zahlen mit einem neuronalen Netzwerk erkennt
Hallo Welt mit Google App Engine (Java 8) + Servlet API 3.1 + Gradle
(Fehler) Stellen Sie eine mit Flask mit Heroku erstellte Web-App bereit
Tornado - Erstellen wir eine Web-API, die JSON problemlos mit JSON zurückgibt
Erstellen Sie eine Web-API, die Bilder mit Django liefern kann
Hallo Welt mit Google App Engine (Java 11) + Spring Boot + Gradle