environments in
To set a key/value pair, use
Use
#golang #go #env #environment #environment_variables #range #setenv #getenv #environ
Golang
:To set a key/value pair, use
os.Setenv
. To get a value for a key, use os.Getenv
. This will return an empty string if the key isn’t present in the environment.Use
os.Environ
to list all key/value pairs in the environment. This returns a slice of strings in the form KEY=value
. You can strings.Split
them to get the key and value. Here we print all the keys:package main
import (
"os"
"strings"
"fmt"
)
func main() {
os.Setenv("FOO", "1")
fmt.Println("FOO:", os.Getenv("FOO"))
fmt.Println("BAR:", os.Getenv("BAR"))
fmt.Println()
for _, e := range os.Environ() {
pair := strings.Split(e, "=")
fmt.Println(pair[0])
}
}
#golang #go #env #environment #environment_variables #range #setenv #getenv #environ
If you want to implement "Python Capitalize" method in
There is another method called ToTitle which is used for one character long (but to letters):
#python #golang #go #ToLower #Title #strings #capitalize #ToTitle
Go
:strings.Title(strings.ToLower("MYNAME")) // output: Myname
There is another method called ToTitle which is used for one character long (but to letters):
str := "dz"
fmt.Println(strings.ToTitle(str)) // output: Dz
#python #golang #go #ToLower #Title #strings #capitalize #ToTitle
drop by drop and your bucket gets filled up
یکی از اساتید جمله بالارو مطرح کرده بودند که به نظر من میتونه زندگی بعضی هارو متحول کنه! موضوع بحث اینه که شما قطره قطره به یادگیری خودتان اضافه کنید و در این امر ممارست به خرج بدید و برنامه ریزی مدون داشته باشید. شک نکنید، شک نکنید که به مقصود خودتان خواهید رسید. اگر بخواهیم در کانتکست برنامه نویسی صحبت کنیم یک زبان جدید را در نظر بگیرید که قرار است فرابگیرید. چطور میتوانید یک زبان جدید را مثل زبانی که الان به آن مسلط هستید یاد بگیرید؟ آیا باید زندگی را تعطیل کنید و مسئله جدید را یاد بگیرید؟ نه اصلا اینگونه نیست، تنها کافیست بصورت قطره چکانی هر روز به آن مبحث بپردازید. فقط کافیست هر روز نهال نو پا را آب دهید و به آن برسید این درخت قرار نیست یک روزه تنومند شود و یکروزه میوه دهد تنها برنامه ریزی، تمرین و ممارست شما را به سر منزل مقصود خواهد رساند. تنها کافیست روزی یک ساعت برای آن وقت بگذارید و آخر سال ببینید به کجا رسیده اید. drop by drop!
#motivation #motivational_speaking #life_changing
A very great talk by
- https://www.youtube.com/watch?v=OcjMi9cXItY
#youtube #golang #go #microservice #gomicro #micro
Brian Ketelsen
about microservices using go-micro
:- https://www.youtube.com/watch?v=OcjMi9cXItY
#youtube #golang #go #microservice #gomicro #micro
YouTube
Microservices in Go using Micro - Brian Ketelsen - Codemotion Milan 2017
Go beyond the hype and dig into building microservices with the Go framework Micro (micro.mu). In this talk you’ll learn how to create and deploy microservices using the popular framework Micro, which was extracted out of experience running services at Google…
Slices
are far more efficient than Arrays
in Go
. Assigning one array to another copies all the elements while in Slice
it refers to the underlying Array
. There are major differences between the ways arrays work in
Go
and C
. In Go
,-
Arrays
are values. Assigning one array to another copies all the elements.- In particular, if you pass an
array
to a function, it will receive a copy of the array
, not a pointer to it.- The size of an
array
is part of its type. The types [10]int
and [20]int
are distinct.*NOTE:* The value property can be useful but also expensive; if you want C-like behavior and efficiency, you can pass a pointer to the array.
Read more about
arrays
and slices
here:- https://golang.org/doc/effective_go.html#arrays
#go #arrays #slices
go.dev
Effective Go - The Go Programming Language
A very great article about Go styling and how to code readble, maintainable code in Go (it can be used in other languages too):
- https://dave.cheney.net/practical-go/presentations/qcon-china.html#_always_document_public_symbols
#golang #go #maintainable #readble_code
- https://dave.cheney.net/practical-go/presentations/qcon-china.html#_always_document_public_symbols
#golang #go #maintainable #readble_code
dave.cheney.net
Practical Go: Real world advice for writing maintainable Go programs
Let's talk a little bit about
- https://golang.org/pkg/sync/#WaitGroup
A
With an example it will be crystal clear. Let's say we have a script that fetches URLs concurrently and we want to wait using
First we create a
s done getting the URL, defer will be run and
#golang #go #sync #WaitGroup #Done #Add #Wait
WaitGroup
in sync
library. First things first, the documentation is here:- https://golang.org/pkg/sync/#WaitGroup
A
WaitGroup
waits for a collection of goroutines
to finish. The main goroutine
calls Add
to set the number of goroutines
to wait for. Then each of the goroutines
runs and calls Done
when finished. At the same time, Wait
can be used to block until all goroutines
have finished.With an example it will be crystal clear. Let's say we have a script that fetches URLs concurrently and we want to wait using
WaitGroup
until all the fetches are complete:package main
import (
"sync"
)
type httpPkg struct{}
func (httpPkg) Get(url string) {}
var http httpPkg
func main() {
var wg sync.WaitGroup
var urls = []string{
"http://www.golang.org/",
"http://www.google.com/",
"http://www.somestupidname.com/",
}
for _, url := range urls {
// Increment the WaitGroup counter.
wg.Add(1)
// Launch a goroutine to fetch the URL.
go func(url string) {
// Decrement the counter when the goroutine completes.
defer wg.Done()
// Fetch the URL.
http.Get(url)
}(url)
}
// Wait for all HTTP fetches to complete.
wg.Wait()
}
First we create a
WaitGroup
called wg
and using range
loop through the URLs on each iterration we use Add
to increment WaitGroup
counter/queue and run an anonymous function that gets a URL. When func is done getting the URL, defer will be run and
Done
decrement the counter in WaitGroup
. Finally we use Wait
to actually wait for all http calls to get completed.NOTE:
anonymous function is preceded with go
keyword that runs the function concurrently.#golang #go #sync #WaitGroup #Done #Add #Wait
pkg.go.dev
sync package - sync - Go Packages
Package sync provides basic synchronization primitives such as mutual exclusion locks.
How to add nested documents in
#python #data_class #marshmallow #fields #list #OneOf
Marshmallow
python?books = fields.List(fields.Dict(
keys=fields.String(validate=OneOf(('title', 'author', 'publication_date'))),
values=fields.String(required=True)))
#python #data_class #marshmallow #fields #list #OneOf
In
you want to install network tools (like ping) you need to install
You can squash your image size even further by some tips. When you install a package, linux distros first download the package and put it in a cache folder. In
To tell the OS to delete the cache after installation you can provide
There are some package like
y using
Great job guys! You have reduced your alpine docker images so much :)
#docker #linux #alpine #apk #virtual #no_cache #apk_del #apk_add
Dockerfile`s some people in the community use `alpine
base image in order to reduce docker image size. apk
is its package management tool that can be used to install OS packages. So for example ifyou want to install network tools (like ping) you need to install
netcat-openbsd
:apk add netcat-openbsd
You can squash your image size even further by some tips. When you install a package, linux distros first download the package and put it in a cache folder. In
Alpine
it is located in /var/cache/apk
.To tell the OS to delete the cache after installation you can provide
--no-cache
option to it:apk add --no-cache netcat-openbsd
There are some package like
g++
or git
that is needed on installation of some other packages. After installation those packages is useless and just increase image size. You can remove those packages by using
--virtual
command:apk add --no-cache --virtual .build-deps g++ \
&& # do you stuff here \
&& apk del .build-deps
Great job guys! You have reduced your alpine docker images so much :)
#docker #linux #alpine #apk #virtual #no_cache #apk_del #apk_add
In
#python #marshmallow #fields #fields_method
marshmallow
you can have a schema field which can be filled with a method output. Let's see with an example:class AuthorSchema(Schema):As you see
id = fields.Int(dump_only=True)
first = fields.Str()
last = fields.Str()
formatted_name = fields.Method("format_name", dump_only=True)
def format_name(self, author):
return "{}, {}".format(author.last, author.first)
formatted_name
field is filled by a method called format_name
. Examples are endless, you can calculate average score based on the given scores for instance.#python #marshmallow #fields #fields_method
GJSON
is a Go
package that provides a fast and simple way to get values from a json document. It has features such as one line retrieval, dot notation paths, iteration, and parsing json lines.Las mere:
https://github.com/tidwall/gjson
#golang #go #gjson
GitHub
GitHub - tidwall/gjson: Get JSON values quickly - JSON parser for Go
Get JSON values quickly - JSON parser for Go. Contribute to tidwall/gjson development by creating an account on GitHub.