Mit geringen Kenntnissen sind Sie ein autarker Ingenieur! Ich schickte es mir selbst, der begeistert die C-Sprache lernte, aber keinen Spaß fand.
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).
Um zu entscheiden, ob Sie Go lernen möchten, erstellen wir eine einfache Web-App (gehen Sie einfach dorthin und sagen Sie Hallo Welt).
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.
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!
Ü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
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)
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.
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.
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