From ee1ecf0924aa5b3acd5995207de3ae5a0834a610 Mon Sep 17 00:00:00 2001 From: SourceFellows Date: Wed, 21 Oct 2020 06:05:47 +0200 Subject: [PATCH] =?UTF-8?q?Verlinkungen=20zu=20Beispielen=20eingef=C3=BCgt?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 150 ++++++++++++++++++ best-practices/struct-to-text/main.go | 13 ++ golang-language-samples/fmt-package/main.go | 7 + .../varadic-parameter/main.go | 12 ++ microservices/logging/main.go | 12 ++ 5 files changed, 194 insertions(+) create mode 100644 golang-language-samples/fmt-package/main.go create mode 100644 golang-language-samples/varadic-parameter/main.go diff --git a/README.md b/README.md index 23aede8..3076df5 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,153 @@ Das Repository beinhaltet die Codebeispiele für das Buch `Microservices mit Go` des Rheinwerk Verlags: https://www.rheinwerk-verlag.de/microservices-mit-go-konzepte-werkzeuge-best-practices/ + +Der aktuelle Stand befinden sich immer unter: https://github.com/SourceFellows/gobuch + +## Beispiele + +Folgende Beispielprojekte sind in diesem Repository enthalten: + +* 1 Einführung + * [cplusplus](hello-world/cplusplus) + * [go](hello-world/go) + * [java](hello-world/java) + * [javascript](hello-world/javascript) + * [python](hello-world/python) + * [typescript](hello-world/typescript) + * [hello-interface](hello-interface) + * [hello-channel](hello-channel) + * [hello-go-channel](hello-go-channel) + * [hello-channel-post](hello-channel-post) + +* 2 Die Grundlagen von Go + * [collection-array](go-language-sample/collection-array) + * [collection-array-slice](go-language-sample/collection-array-slice) + * [collection-capa](go-language-sample/collection-capa) + * [collection-for-range](go-language-sample/collection-for-range) + * [defer](go-language-sample/defer) + * [defer-file-open](go-language-sample/defer-file-open) + * [defer-lock](go-language-sample/defer-lock) + * [errors](go-language-sample/errors) + * [errors-new](go-language-sample/errors-new) + * [errors-owntyp](go-language-sample/errors-owntyp) + * [errors-owntyp-wrap](go-language-sample/errors-owntyp-wrap) + * [fmt-package](go-language-sample/fmt-package) + * [for-range](go-language-sample/for-range) + * [pointer](go-language-sample/pointer) + * [pointer-parameter](go-language-sample/pointer-parameter) + * [pointer-receiver](go-language-sample/pointer-receiver) + * [pointer-struct](go-language-sample/pointer-struct) + * [sampledoc](go-language-sample/sampledoc) + * [switch-case](go-language-sample/switch-case) + * [switch-case-falltrough](go-language-sample/switch-case-falltrough) + * [switch-case-no-expression](go-language-sample/switch-case-no-expression) + * [type-alias-definition](go-language-sample/type-alias-definition) + * [type-definition](go-language-sample/type-definition) + * [type-definition-assertion](go-language-sample/type-definition-assertion) + * [type-definition-interface](go-language-sample/type-definition-interface) + * [type-definition-interface-receiver](go-language-sample/type-definition-interface-receiver) + * [type-definition-struct](go-language-sample/type-definition-struct) + * [type-definition-switch](go-language-sample/type-definition-switch) + * [type-failure](go-language-sample/type-failure) + * [varadic-parameter](go-language-sample/varadic-parameter) + * [somelib](somelib) + * [vscode-first](vscode-first) + * [first-module-dependency](first-module-dependency) + * [library-dependency](library-dependency) + * [module-logrus](module-logrus) + +* 3 Microservices + * [container](microservices/container) + * [default-mux-demo](microservices/default-mux-demo) + * [formrequest](microservices/formrequest) + * [go-channel](microservices/go-channel) + * [gorilla-mux](microservices/gorilla-mux) + * [gorm](microservices/gorm) + * [gorm-hooks](microservices/gorm-hooks) + * [gorm-relation](microservices/gorm-relation) + * [grpc](microservices/grpc) + * [hanlder-impl](microservices/hanlder-impl) + * [http-client](microservices/http-client) + * [http-client-circut-breaker](microservices/http-client-circut-breaker) + * [http-client-config](microservices/http-client-config) + * [http-client-ssl-cert](microservices/http-client-ssl-cert) + * [http-metod-matching](microservices/http-metod-matching) + * [http-ratelimit](microservices/http-ratelimit) + * [http-registration](microservices/http-registration) + * [http-retry](microservices/http-retry) + * [httpsserver](microservices/httpsserver) + * [httpsservercert](microservices/httpsservercert) + * [jsonhandling](microservices/jsonhandling) + * [jsonservice](microservices/jsonservice) + * [jwt](microservices/jwt) + * [letscrypt](microservices/letscrypt) + * [logging](microservices/logging) + * [middleware](microservices/middleware) + * [mongodb](microservices/mongodb) + * [mongodb-update](microservices/mongodb-update) + * [nats](microservices/nats) + * [oracle-db-connection](microservices/oracle-db-connection) + * [oracle-db-connection-prepared-statement](microservices/oracle-db-connection-prepared-statement) + * [oracle-db-connection-write](microservices/oracle-db-connection-write) + * [oracle-db-connection-write-tx](microservices/oracle-db-connection-write-tx) + * [prometheus](microservices/prometheus) + * [prometheus-metrics](microservices/prometheus-metrics) + * [rfc7808](microservices/rfc7808) + * [simple-http](microservices/simple-http) + * [best-practices-generator-function](concurrency/best-practices-generator-function) + * [best-practices-multiplexer](concurrency/best-practices-multiplexer) + * [best-practices-multiplexer-select](concurrency/best-practices-multiplexer-select) + * [best-practices-sync](concurrency/best-practices-sync) + * [best-practices-timeout](concurrency/best-practices-timeout) + * [channel-mit-close](concurrency/channel-mit-close) + * [channel-range](concurrency/channel-range) + * [channels](concurrency/channels) + * [first-go-routine](concurrency/first-go-routine) + * [first-go-routine-mit-channel](concurrency/first-go-routine-mit-channel) + * [graceful-shutdown](concurrency/graceful-shutdown) + * [java-threads-beispiel](concurrency/java-threads-beispiel) + * [application-configuration](configuration/application-configuration) + * [application-configuration-os](configuration/application-configuration-os) + * [application-configuration-viper](configuration/application-configuration-viper) + +* 4 Die Qualitätssicherung + * [http-server-test](quality/http-server-test) + * [http-server-test.v1](quality/http-server-test.v1) + * [http-server-test.v2](quality/http-server-test.v2) + * [http-server-test.v3](quality/http-server-test.v3) + * [unittest](quality/unittest) + +* 5 Best Practices – idiomatisches und effektives Go + * [context](best-practices/context) + * [context-http-server](best-practices/context-http-server) + * [context-loop](best-practices/context-loop) + * [context-value](best-practices/context-value) + * [context-value-nono](best-practices/context-value-nono) + * [empty-string-check](best-practices/empty-string-check) + * [error-behaviour](best-practices/error-behaviour) + * [error-handling](best-practices/error-handling) + * [error-handling-2](best-practices/error-handling-2) + * [error-handling-3](best-practices/error-handling-3) + * [file-io](best-practices/file-io) + * [file-io-large](best-practices/file-io-large) + * [force-interface](best-practices/force-interface) + * [goroutine-pooling](best-practices/goroutine-pooling) + * [logging-defer](best-practices/logging-defer) + * [map-contains](best-practices/map-contains) + * [project-structure](best-practices/project-structure) + * [single-method-interface](best-practices/single-method-interface) + * [struct-to-text](best-practices/struct-to-text) + * [synchron-api](best-practices/synchron-api) + +* 6 Go-Service an die Cloud anbinden + * [aws-beanstak-sample](cloud-provider/aws-beanstak-sample) + * [aws-lambda-go](cloud-provider/aws-lambda-go) + * [azure-kubernetes](cloud-provider/azure-kubernetes) + * [docker-compose](cloud-provider/docker-compose) + * [docker-sample](cloud-provider/docker-sample) + * [docker-sample-multistage](cloud-provider/er-sample-multistage) + * [go-cloud](cloud-provider/go-cloud) + * [google-cloud-hello](cloud-provider/google-cloud-hello) + * [google-cloud-sample](cloud-provider/google-cloud-sample) + * [minikube-sample](cloud-provider/minikube-sample) diff --git a/best-practices/struct-to-text/main.go b/best-practices/struct-to-text/main.go index e470b3c..0e9d78d 100644 --- a/best-practices/struct-to-text/main.go +++ b/best-practices/struct-to-text/main.go @@ -8,9 +8,22 @@ type Tester struct { Sonstwas string } +type StringTester struct { + Name string + Alter int + Sonstwas string +} + +func (st *StringTester) String() string { + return fmt.Sprintf("StringTester %v, Alter: %v", st.Name, st.Alter) +} + func main() { t := &Tester{Name: "Dingo", Alter: 3, Sonstwas: "Wert"} fmt.Printf("%+v\n", t) + st := &StringTester{Name: "Dingo", Alter: 3, Sonstwas: "Wert"} + fmt.Printf("%+v\n", st) + } diff --git a/golang-language-samples/fmt-package/main.go b/golang-language-samples/fmt-package/main.go new file mode 100644 index 0000000..bc4547f --- /dev/null +++ b/golang-language-samples/fmt-package/main.go @@ -0,0 +1,7 @@ +package main + +import "fmt" + +func main() { + fmt.Printf("Hello %q", "hello") +} diff --git a/golang-language-samples/varadic-parameter/main.go b/golang-language-samples/varadic-parameter/main.go new file mode 100644 index 0000000..4339a57 --- /dev/null +++ b/golang-language-samples/varadic-parameter/main.go @@ -0,0 +1,12 @@ +package main + +import "fmt" + +func something(text string, i ...int) int { + fmt.Println(i[0]) + return i[1] +} + +func main() { + fmt.Println(something("hello", 1, 2)) +} diff --git a/microservices/logging/main.go b/microservices/logging/main.go index 80e13b2..f609566 100644 --- a/microservices/logging/main.go +++ b/microservices/logging/main.go @@ -1,10 +1,21 @@ package main import ( + "time" + log "github.com/sirupsen/logrus" ) +type Testing struct { + Val1 bool + Val2 string + Val3 time.Time +} + func main() { + + log.SetFormatter(&log.JSONFormatter{}) + // zusätzliche Felder an log.Entry anhängen log.WithFields(log.Fields{ "importId": "ka18s", @@ -15,6 +26,7 @@ func main() { contextLogger := log.WithFields(log.Fields{ "importId": "0815s", "other": "Ich werde geloggt", + "test": Testing{Val3: time.Now()}, }) contextLogger.Info("I'll be logged with common and other field") contextLogger.Info("Me too")