package main import ( "fmt" "strings" ) func main() { fmt.Println( // true strings.Contains("test", "es"), // 2 strings.Count("test", "t"), // true strings.HasPrefix("test", "te"), // true strings.HasSuffix("test", "st"), // 1 strings.Index("test", "e"), // "a-b" strings.Join([]string{"a","b"}, "-"), // == "aaaaa" strings.Repeat("a", 5), // "bbaa" strings.Replace("aaaa", "a", "b", 2), // []string{"a","b","c","d","e"} strings.Split("a-b-c-d-e", "-"), // "test" strings.ToLower("TEST"), // "TEST" strings.ToUpper("test"), ) }
Месяц: Август 2023
Golang interface
Проверка, что наша структура user реализует интерфейс User
Создаем переменную которая не нужна с типом User и значением структуры user
var _ User = &user{} type User interface { ChangFIO(newFio string) } type user struct { FIO string } func (u *user) ChangFIO(newFio string) { }
Invoke golang
package main import ( "fmt" "reflect" ) var funcMap = map[string]interface{}{ "Hello": Hello, } func Hello(name string) { fmt.Printf("Hello, %s!\n", name) } func main() { nameFunc := "Hello" if fn, ok := funcMap[nameFunc]; ok { funcValue := reflect.ValueOf(fn) args := []reflect.Value{reflect.ValueOf("Gopher")} funcValue.Call(args) } else { fmt.Println("Function not found!") } }
vscode Fix 100% CPU
https://www.youtube.com/watch?v=36Hm1DEl82M
hexagonal architecture
gracefully shutdown HTTP server
// listen to OS signals and gracefully shutdown HTTP server stopped := make(chan struct{}) go func() { sigint := make(chan os.Signal, 1) signal.Notify(sigint, os.Interrupt, syscall.SIGINT, syscall.SIGTERM) <-sigint ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() if err := srv.Shutdown(ctx); err != nil { log.Printf("HTTP Server Shutdown Error: %v", err) } close(stopped) }() log.Printf("Starting HTTP server on %s", cfg.HTTPAddr) // start HTTP server if err := srv.ListenAndServe(); err != http.ErrServerClosed { log.Fatalf("HTTP server ListenAndServe Error: %v", err) } <-stopped
Introducing basic CQRS by refactoring a Go project
https://threedots.tech/post/basic-cqrs-in-go/
Isn’t CQRS a complex technique?
Isn’t CQRS one of these C#/Java/über enterprise patterns that are hard to implement, and make a big mess in the code? A lot of books, presentations, and articles describe CQRS as a very complicated pattern. But it is not the case.
Conventional Commits
https://www.conventionalcommits.org/en/v1.0.0/#summary
The Conventional Commits specification is a lightweight convention on top of commit messages. It provides an easy set of rules for creating an explicit commit history; which makes it easier to write automated tools on top of. This convention dovetails with SemVer, by describing the features, fixes, and breaking changes made in commit messages