9
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

環境作成

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.ymlPASSWORDで設定した文字を入力してください

ログインできると下記の画面になります
image.png

あとは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の文法(流儀)に置き換えるしかない
9
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?