Skip to content

Instantly share code, notes, and snippets.

View evalphobia's full-sized avatar

evalphobia

View GitHub Profile
Ootahveali0weiChoo9eixir
@evalphobia
evalphobia / The Three Go Landmines.ja.markdown
Last active July 27, 2022 10:48 — forked from lavalamp/The Three Go Landmines.markdown
Go言語の地雷(原題: Golang landmines)

Goでよくやってしまうミスが3つあります。
私はそのミスを、分かりやすいように簡略した書き方ではなく、巷でよく見かける書き方のままここで説明します。
3つのミスの全てが、私の知る限り少なくとも1回づつ、Kubernetesの過去のコードレビューにありました。

1: ループ変数がループ外のスコープになっている

この各行はいったい何を行っているのでしょうか。想像してから下へスクロールしてください。

9 Testing and benchmarking テストとベンチマーク

この章で学ぶこと

  • ちゃんと単体テストを書こう
  • httptestを使えばHTTPリクエストをモックできるよ
  • サンプルコードをつけてドキュメントを書こう
  • ベンチマークしてパフォーマンスを測定しよう

開発が終わるまでテストコードを待つ必要はない。開発のプロセスに組み込むことが出来る

@evalphobia
evalphobia / nginx_cachet.conf
Created February 23, 2016 12:02
nginx config
# https://cachethq.io/
upstream _cachet {
# docker's ip and port
server 127.0.0.1:8001;
}
server {
listen 80;
server_name cachet.example.com;

6 Concurrency 並行処理

  • ゴルーチンを使ったコード
  • レースコンディションの検知と修正
  • チャネルによるデータ共有

・スケジューラーがどのゴルーチンがどのプロセッサで動いているか管理している
・CSP message passing model(共有データをロックするのではなくチャネルでの受け渡し)

@evalphobia
evalphobia / main_test.go
Last active January 18, 2016 10:51
テストコード02
package main
import (
"bytes"
"io"
"os"
"testing"
"github.com/stretchr/testify/assert"
)
@evalphobia
evalphobia / main_test.go
Created January 18, 2016 10:22
テストコード01
package main
import (
"bytes"
"io"
"os"
"strings"
"testing"
"github.com/stretchr/testify/assert"
require 'ltsv'
require 'json'
result = {}
STDIN.each do |line|
record = LTSV.parse(line)
path = false
res = record[0]
next if res.nil?
package main
import "fmt"
func main() {
p := []string{"Tokyo", "Kyoto", "Osaka", "Nagoya"}
res := createPermurations(p)
fmt.Printf("%v\n", res)
}
@evalphobia
evalphobia / atoi_test.go
Last active February 13, 2023 16:12
golang benchmark: String and Int conversions
package bench
import (
"strconv"
"testing"
)
var smallStr = "35"
var bigStr = "999999999999999"