Merge remote-tracking branch 'origin/master'

This commit is contained in:
Teiva Harsanyi 2023-01-30 11:27:31 +01:00
commit 28b76b9c04
No known key found for this signature in database
GPG key ID: 421EF65C3FD2F93C

View file

@ -28,7 +28,7 @@ This section contains a summary of the 100 mistakes in the book. Meanwhile, it's
* [Interface on the producer side](#interface-on-the-producer-side-6) * [Interface on the producer side](#interface-on-the-producer-side-6)
* [Returning interfaces](#returning-interfaces-7) * [Returning interfaces](#returning-interfaces-7)
* [`any` says nothing](#any-says-nothing-8) * [`any` says nothing](#any-says-nothing-8)
* [Being confused about when to use generics](#being-confused-about-when-to-use-genericshttpsteivahmediumcomwhen-to-use-generics-in-go-36d49c1aeda-9) ([Read the full excerpt 👀](https://teivah.medium.com/when-to-use-generics-in-go-36d49c1aeda)) * [Being confused about when to use generics](#being-confused-about-when-to-use-generics-9) ([Read the full excerpt 👀](https://teivah.medium.com/when-to-use-generics-in-go-36d49c1aeda))
* [Not being aware of the possible problems with type embedding](#not-being-aware-of-the-possible-problems-with-type-embedding-10) * [Not being aware of the possible problems with type embedding](#not-being-aware-of-the-possible-problems-with-type-embedding-10)
* [Not using the functional options pattern](#not-using-the-functional-options-pattern-11) * [Not using the functional options pattern](#not-using-the-functional-options-pattern-11)
* [Project misorganization](#project-misorganization-project-structure-and-package-organization-12) * [Project misorganization](#project-misorganization-project-structure-and-package-organization-12)
@ -40,7 +40,7 @@ This section contains a summary of the 100 mistakes in the book. Meanwhile, it's
* [Creating confusion with octal literals](#creating-confusion-with-octal-literals-17) * [Creating confusion with octal literals](#creating-confusion-with-octal-literals-17)
* [Neglecting integer overflows](#neglecting-integer-overflows-18) * [Neglecting integer overflows](#neglecting-integer-overflows-18)
* [Not understanding floating-points](#not-understanding-floating-points-19) * [Not understanding floating-points](#not-understanding-floating-points-19)
* [Not understanding slice length and capacity](#not-understanding-slice-length-and-capacityhttpsteivahmediumcomslice-length-vs-capacity-in-go-af71a754b7d8-20) ([Read the full excerpt 👀](https://teivah.medium.com/slice-length-vs-capacity-in-go-af71a754b7d8)) * [Not understanding slice length and capacity](#not-understanding-slice-length-and-capacity-20) ([Read the full excerpt 👀](https://teivah.medium.com/slice-length-vs-capacity-in-go-af71a754b7d8))
* [Inefficient slice initialization](#inefficient-slice-initialization-21) * [Inefficient slice initialization](#inefficient-slice-initialization-21)
* [Being confused about nil vs. empty slice](#being-confused-about-nil-vs-empty-slice-22) * [Being confused about nil vs. empty slice](#being-confused-about-nil-vs-empty-slice-22)
* [Not properly checking if a slice is empty](#not-properly-checking-if-a-slice-is-empty-23) * [Not properly checking if a slice is empty](#not-properly-checking-if-a-slice-is-empty-23)
@ -48,7 +48,7 @@ This section contains a summary of the 100 mistakes in the book. Meanwhile, it's
* [Unexpected side effects using slice append](#unexpected-side-effects-using-slice-append-25) * [Unexpected side effects using slice append](#unexpected-side-effects-using-slice-append-25)
* [Slice and memory leaks](#slice-and-memory-leaks-26) * [Slice and memory leaks](#slice-and-memory-leaks-26)
* [Inefficient map initialization](#inefficient-map-initialization-27) * [Inefficient map initialization](#inefficient-map-initialization-27)
* [Map and memory leaks](#map-and-memory-leakshttpsteivahmediumcommaps-and-memory-leaks-in-go-a85ebe6e7e69-28) ([Read the full excerpt 👀](https://teivah.medium.com/maps-and-memory-leaks-in-go-a85ebe6e7e69)) * [Map and memory leaks](#map-and-memory-leaks-28) ([Read the full excerpt 👀](https://teivah.medium.com/maps-and-memory-leaks-in-go-a85ebe6e7e69))
* [Comparing values incorrectly](#comparing-values-incorrectly-29) * [Comparing values incorrectly](#comparing-values-incorrectly-29)
* [Control Structures](#control-structures) * [Control Structures](#control-structures)
* [Ignoring that elements are copied in `range` loops](#ignoring-that-elements-are-copied-in-range-loops-30) * [Ignoring that elements are copied in `range` loops](#ignoring-that-elements-are-copied-in-range-loops-30)
@ -81,8 +81,7 @@ This section contains a summary of the 100 mistakes in the book. Meanwhile, it's
* [Not handling `defer` errors](#not-handling-defer-errors-54) * [Not handling `defer` errors](#not-handling-defer-errors-54)
* [Concurrency: Foundations](#concurrency-foundations) * [Concurrency: Foundations](#concurrency-foundations)
* [Mixing up concurrency and parallelism](#mixing-up-concurrency-and-parallelism-55) * [Mixing up concurrency and parallelism](#mixing-up-concurrency-and-parallelism-55)
* [Thinking concurrency is always faster](#thinking-concurrency-is-always-fasterhttpsteivahmediumcomconcurrency-isnt-always-faster-in-go-de325168907c-56) * [Thinking concurrency is always faster](#thinking-concurrency-is-always-faster-56) ([Read the full excerpt 👀](https://teivah.medium.com/concurrency-isnt-always-faster-in-go-de325168907c))
* [Thinking concurrency is always faster](#thinking-concurrency-is-always-fasterhttpsteivahmediumcomconcurrency-isnt-always-faster-in-go-de325168907c-56) ([Read the full excerpt 👀](https://teivah.medium.com/concurrency-isnt-always-faster-in-go-de325168907c))
* [Being puzzled about when to use channels or mutexes](#being-puzzled-about-when-to-use-channels-or-mutexes-57) * [Being puzzled about when to use channels or mutexes](#being-puzzled-about-when-to-use-channels-or-mutexes-57)
* [Not understanding race problems](#not-understanding-race-problems-data-races-vs-race-conditions-and-the-go-memory-model-58) * [Not understanding race problems](#not-understanding-race-problems-data-races-vs-race-conditions-and-the-go-memory-model-58)
* [Not understanding the concurrency impacts of a workload type](#not-understanding-the-concurrency-impacts-of-a-workload-type-59) * [Not understanding the concurrency impacts of a workload type](#not-understanding-the-concurrency-impacts-of-a-workload-type-59)
@ -118,7 +117,7 @@ This section contains a summary of the 100 mistakes in the book. Meanwhile, it's
* [Sleeping in unit tests](#sleeping-in-unit-tests-86) * [Sleeping in unit tests](#sleeping-in-unit-tests-86)
* [Not dealing with the time API efficiently](#not-dealing-with-the-time-api-efficiently-87) * [Not dealing with the time API efficiently](#not-dealing-with-the-time-api-efficiently-87)
* [Not using testing utility packages](#not-using-testing-utility-packages-httptest-and-iotest-88) * [Not using testing utility packages](#not-using-testing-utility-packages-httptest-and-iotest-88)
* [Writing inaccurate benchmarks](#writing-inaccurate-benchmarkshttpsteivahmediumcomhow-to-write-accurate-benchmarks-in-go-4266d7dd1a95-89) ([Read the full excerpt 👀](https://teivah.medium.com/how-to-write-accurate-benchmarks-in-go-4266d7dd1a95)) * [Writing inaccurate benchmarks](#writing-inaccurate-benchmarks-89) ([Read the full excerpt 👀](https://teivah.medium.com/how-to-write-accurate-benchmarks-in-go-4266d7dd1a95))
* [Not exploring all the Go testing features](#not-exploring-all-the-go-testing-features-90) * [Not exploring all the Go testing features](#not-exploring-all-the-go-testing-features-90)
* [Optimizations](#optimizations) * [Optimizations](#optimizations)
* [Not understanding CPU caches](#not-understanding-cpu-caches-91) * [Not understanding CPU caches](#not-understanding-cpu-caches-91)
@ -128,7 +127,7 @@ This section contains a summary of the 100 mistakes in the book. Meanwhile, it's
* [Not understanding stack vs. heap](#not-understanding-stack-vs-heap-95) * [Not understanding stack vs. heap](#not-understanding-stack-vs-heap-95)
* [Not knowing how to reduce allocations](#not-knowing-how-to-reduce-allocations-api-change-compiler-optimizations-and-syncpool-96) * [Not knowing how to reduce allocations](#not-knowing-how-to-reduce-allocations-api-change-compiler-optimizations-and-syncpool-96)
* [Not relying on inlining](#not-relying-on-inlining-97) * [Not relying on inlining](#not-relying-on-inlining-97)
* [Not using Go diagnostics tooling](#not-using-go-diagnostics-tooling-profiling-enabling-pprof-cpu-heap-goroutines-block-and-mutex-profiling-and-execution-tracer-98) * [Not using Go diagnostics tooling](#not-using-go-diagnostics-tooling-98) ([Read the full excerpt 👀](https://medium.com/@teivah/profiling-and-execution-tracing-in-go-a5e646970f5b))
* [Not understanding how the GC works](#not-understanding-how-the-gc-works-99) * [Not understanding how the GC works](#not-understanding-how-the-gc-works-99)
* [Not understanding the impacts of running Go in Docker and Kubernetes](#not-understanding-the-impacts-of-running-go-in-docker-and-kubernetes-100) * [Not understanding the impacts of running Go in Docker and Kubernetes](#not-understanding-the-impacts-of-running-go-in-docker-and-kubernetes-100)
@ -633,7 +632,7 @@ Reducing allocations is also an essential aspect of optimizing a Go application.
Use the fast-path inlining technique to efficiently reduce the amortized time to call a function. Use the fast-path inlining technique to efficiently reduce the amortized time to call a function.
#### Not using Go diagnostics tooling (profiling [enabling pprof, CPU, heap, goroutines, block, and mutex profiling] and execution tracer) (#98) #### [Not using Go diagnostics tooling](https://medium.com/@teivah/profiling-and-execution-tracing-in-go-a5e646970f5b) (#98)
Rely on profiling and the execution tracer to understand how an application performs and the parts to optimize. Rely on profiling and the execution tracer to understand how an application performs and the parts to optimize.