GitHub - shouta0715/golang-essence
2023-09-30
2023-10-01
map型は参照渡し。for文で回したときは順分保証なし
2023-10-12
フォーマット指定子 | 説明 | 例 |
---|---|---|
%v | 変数の自然な形式 | fmt.Printf("%v", 42) → 42 |
%+v | フィールド名付きでのstruct表示 | |
%#v | Goの構文での変数の形式 | fmt.Printf("%#v", "test") → "test" |
%T | 型の名前 | fmt.Printf("%T", 42) → int |
%d | 整数 | fmt.Printf("%d", 42) → 42 |
%b | 2進数 | fmt.Printf("%b", 5) → 101 |
%o | 8進数 | fmt.Printf("%o", 8) → 10 |
%x | 16進数(小文字) | fmt.Printf("%x", 255) → ff |
%X | 16進数(大文字) | fmt.Printf("%X", 255) → FF |
%f | 浮動小数点数(小数点以下6桁) | fmt.Printf("%f", 3.14) → 3.140000 |
%F | %fと同様 | fmt.Printf("%F", 3.14) → 3.140000 |
%e | 指数表記(小文字) | fmt.Printf("%e", 10000.0) → 1.000000e+04 |
%E | 指数表記(大文字) | fmt.Printf("%E", 10000.0) → 1.000000E+04 |
%g | 最短の%eか%f | fmt.Printf("%g", 3.14) → 3.14 |
%G | %gと同様だが大文字を使用 | fmt.Printf("%G", 3.14) → 3.14 |
%s | 文字列 | fmt.Printf("%s", "test") → test |
%q | ダブルクォートで囲まれた文字列 | fmt.Printf("%q", "test") → "test" |
%p | ポインタの16進数表現 | fmt.Printf("%p", &x) |
%c | 文字(rune) | fmt.Printf("%c", 'A') → A |
%t | ブール値(true or false) | fmt.Printf("%t", true) → true |
2023-10-13
type Option func(*Server)
func New(host string, port int, options ...Option) *Server {
svr := &Server{
host: host,
port: port,
}
for _, option := range options {
option(svr)
}
return svr
}
func WithTimeout(timeout time.Duration) func(*Server) {
return func(s *Server) {
s.timeout = timeout
}
}
func WithLogger(logger *log.Logger) func(*Server) {
return func(s *Server) {
s.logger = logger
}
}
func main() {
f, err := os.Create("server.log")
if err != nil {
log.Fatal(err)
}
defer f.Close()
logger := log.New(f, "", log.LstdFlags)
svr := server.New("localhost", 8080, server.WithLogger(logger), server.WithTimeout(30))
if err := svr.Start(); err != nil {
log.Fatal(err)
}
}