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)
}
}