環境作成
Dockerを使って環境を作ります
インストールする内容
- Go
- code-server
- VSCodeをWebで動作させます
- VSCodeの拡張機能
- Go
Dockerfile
FROM codercom/code-server:latest
USER root
RUN apt-get update -y && apt-get install -y \
golang-go \
build-essential
USER coder
RUN code-server --install-extension golang.Go \
&& code-server --install-extension MS-CEINTL.vscode-language-pack-ja
docker-compose.yml
services:
code-server:
build:
context: .
dockerfile: Dockerfile
container_name: code-server
ports:
- "8080:8080"
volumes:
- "./config:/home/coder/.config"
- "./project:/home/coder/project"
environment:
- PASSWORD=1111
- TZ=Asia/Tokyo
Docker実行
$ docker-compose up -d
http://127.0.0.1:8080/にアクセス
パスワードを聞かれるのでdocker-compose.ymlのPASSWORDで設定した文字を入力してください
あとはVSCodeと使い方は同じです
※Goのバージョンが古くて警告等でますが、実験はできるのでここではスルーします
Elixirのパイプの再現はできるか?
結論 無理
お題:スカイライン GT-Rを取得せよ
- 車の型式
- Rが付くのもを取得
- 35を除外
- 並び替え
- SKYLINE GT-R {型式}に変換
Elixir
~w"A70 R33 A80 A90 R35 R32 R34 AW11 S13 S14 S15"
|> Enum.filter(fn x -> String.contains?(x, "R") end)
|> Enum.reject(fn x -> String.contains?(x, "35") end)
|> Enum.sort()
|> Enum.map(fn x -> "SKYLINE GT-R #{x}" end)
# 結果
["SKYLINE GT-R R32", "SKYLINE GT-R R33", "SKYLINE GT-R R34"]
Go
package main
import (
"fmt"
"sort"
"strings"
)
func main() {
input := []string{"A70", "R33", "A80", "A90", "R35", "R32", "R34", "AW11", "S13", "S14", "S15"}
var result []string
for _, x := range input {
if strings.Contains(x, "R") && !strings.Contains(x, "35") {
result = append(result, x)
}
}
sort.Strings(result)
var finalResult []string
for _, x := range result {
finalResult = append(finalResult, fmt.Sprintf("SKYLINE GT-R %s", x))
}
for _, car := range finalResult {
fmt.Println(car)
}
}
// 結果
SKYLINE GT-R R32
SKYLINE GT-R R33
SKYLINE GT-R R34
実行方法
go run main.go
Elixirの関数パターンマッチの再現はできるか?
結論 無理
switchとcaseで頑張る
お題: 二つの入力値でOK、NGの判定をする
- 1, 2 OK
- 2, 3 OK
- 上記以外 NG
Elixir
defmodule Ymn2 do
def next(1, 2), do: "OK"
def next(2, 3), do: "OK"
def next(_, _), do: "NG"
end
Ymn2.next(1, 2)
|> IO.inspect()
Ymn2.next(2, 3)
|> IO.inspect()
Ymn2.next(2, 1)
|> IO.inspect()
# 結果
"OK"
"OK"
"NG"
Go
package main
import "fmt"
func next(a, b int) string {
switch {
case a == 1 && b == 2:
return "OK"
case a == 2 && b == 3:
return "OK"
default:
return "NG"
}
}
func main() {
fmt.Println(next(1, 2))
fmt.Println(next(2, 3))
fmt.Println(next(2, 1))
}
// 結果
OK
OK
NG
実行方法
go run main.go
感想
- Elixirに合わせない方が良い
- Goの文法(流儀)に置き換えるしかない
