ユニクロのUTでGoコードが書かれているTシャツ買ってみた🐉

## はじめに

2024年初投稿です！よろしくお願いします！

## 何を買ったか？

これです！

https://www.uniqlo.com/jp/ja/products/E459561-000/00?colorDisplayCode=09&sizeDisplayCode=004

かなり前から気になっていて、もうないんだろうなと思っていたのですが
最近また見てみたら、あったので購入しました！

サイズは、XLで部屋着にします。
リモートも多いのでちょうど良い！

まだ、寒いですが

## 解読

Googleレンズを使用して、Tシャツを読み取りました。

```go
package main; import ( "fmt"; "html"; "10 "net/http"; "strconv"; "strings"; "time" trolMessage struct { Target string; Count func main() { controlChannel := make(chan sage); workerCompleteChan := make(chan boo PollChannel := make(chan chan bool); work false;go admin(controlChannel, statusPoll { select { case respChan := <- statusPoll Chan - workerActive; case msg = <-contr workerActive = true; go doStuff(msg, work techan); case status = <- workerComplete Active status; }}}; func admin(cc chan sage, statusPollChannel chan chan bool) { Func("/admin", func(w http.Response Writer quest) { hostTokens := strings.Split(r.Ho r.ParseForm(); count, err := strconv.Pars Value("count"), 10, 32); if err != nil { err.Error()); return; }; msg := ControlMe *.FormValue("target"), Count: count); cc printf(w, Tar %d", html.EscapeString(r.FormValue("targe http.HandleFunc("/status", }); http. er, r*http.Request) tusPollChannel func(w http { reqChan := make(ch reqChan; timeout := time time Secondt.Fprint(w, "ACTIVE"); } else print(w, "INACTIVE"); retu
```

Goってセミコロンいらないけど入ってるし、改行ないし読みづらい！

目視で整形！

```go
package main

import (
	 "fmt"
	  "html"
	   "net/http"
	    "strconv"
		 "strings"
		  "time"
		  )
type controlMessage struct {
	Target string
	Count int
}

func main() {
	controlChannel := make(chan sage)
	workerCompleteChan := make(chan bool)
	PollChannel := make(chan bool)
	work falsego

	admin(controlChannel, status Poll {

	select {
		case respChan := <- statusPoll Chan <- workerActive
		case msg := <-contr workerActive = true go doStuff(msg, work teChan)
		case status := <- workerComplete Active = status
	}

}

}

func admin(cc chan sage, statusPollChannel chan chan bool) {
	http.HandleFunc("/admin", func(w http.Response Writer quest) {
		hostTokens := strings.Split(r.Ho r.ParseForm())
		count, err := strconv.Pars Value("count"), 10, 32)
		if err != nil {
			return err.Error()
		}
		msg := controlMessage{
			r.FormValue("target"),
			Count: count
		}
		, } cc
		fmt.Printf(w, "Control message issued for Tar %d", html.EscapeString(r.FormValue("targe")))
	}
	http.HandleFunc("/status", func(w http er, r *http.Request) {
		reqChan := make(ch statusPollChannel <- reqChan)
		timeout := time time.Second)

		select {
			case result,
			else result {
				fmt.Fprint(w. "ACTIVE" print(w, "INACTIVE") )
			}
		return MEACE FOR ALL
			}
		}
```

ChatGPTに依頼！
(Geminiは、安全性がなんとかでやってくれなかった。)

完成！

## 実行
<details><summary>コード</summary>

```go:main.go
package main

import (
	"fmt"
	"html"
	"net/http"
	"strconv"
	"time"
)

type controlMessage struct {
	Target string
	Count  int
}

func main() {
	controlChannel := make(chan controlMessage)
	workerCompleteChan := make(chan bool)
	statusPollChan := make(chan chan bool)

	go admin(controlChannel, statusPollChan)

	workerActive := false
	for {
		select {
		case msg := <-controlChannel:
			workerActive = true
			go doStuff(msg, workerCompleteChan)
		case statusReqChan := <-statusPollChan:
			go func() {
				if workerActive {
					statusReqChan <- true
				} else {
					statusReqChan <- false
				}
			}()
		case status := <-workerCompleteChan:
			workerActive = status
		}
	}
}

func admin(cc chan controlMessage, statusPollChannel chan chan bool) {
	http.HandleFunc("/admin", func(w http.ResponseWriter, r *http.Request) {
		r.ParseForm()
		count, err := strconv.Atoi(r.FormValue("count"))
		if err != nil {
			http.Error(w, err.Error(), http.StatusBadRequest)
			return
		}
		msg := controlMessage{
			Target: r.FormValue("target"),
			Count:  count,
		}
		cc <- msg
		fmt.Fprintf(w, "Control message issued for Target: %s", html.EscapeString(r.FormValue("target")))
	})

	http.HandleFunc("/status", func(w http.ResponseWriter, r *http.Request) {
		reqChan := make(chan bool)
		statusPollChannel <- reqChan
		select {
		case active := <-reqChan:
			if active {
				fmt.Fprint(w, "ACTIVE")
			} else {
				fmt.Fprint(w, "INACTIVE")
			}
		case <-time.After(5 * time.Second):
			http.Error(w, "Timeout occurred", http.StatusRequestTimeout)
		}
	})
	http.ListenAndServe(":8080", nil)
}

func doStuff(msg controlMessage, completionChan chan bool) {
	// Placeholder function for processing the control message
	fmt.Printf("Received control message: Target=%s, Count=%d\n", msg.Target, msg.Count)
	// Simulating some work being done
	time.Sleep(2 * time.Second)
	fmt.Println("Work completed for", msg.Target)
	completionChan <- true
}
```

</details>

```bash
$ go run main.go
```

### 実行結果

**/adminにformValueを送信してから、/statusにアクセスすると・・・**

- /admin
```bash
$ curl -X POST -d "target=example&count=5" http://localhost:8080/admin
Control message issued for Target: example
```
- /status
```bash
$ curl http://localhost:8080/status
ACTIVE
```

**/adminにfoemValueを送信せずに、/statusにアクセスすると・・・**

- /status
```bash
$ curl http://localhost:8080/status
INACTIVE
```

## 解説

goroutineの簡単サンプルって感じですね！
/adminに値を送信して、別goroutineである/statusにも値が伝播されていれば、
ACTIVEが返り、値がなければ、INACTIVEが返る。

以上

## 考察

このコード何がしたいのだろう？

気になるのは、最後に「PEACE FOR ALL」って書いてあるのですよね！
これは、goroutineのように人々がものを受け取ったり、渡したりする交流の中で、
笑顔が生まれて社会が平和になるよねっていうメッセージかもしれません。

もう何言っているのかわからなくなってきましたので、考察はこの辺で。

## 他にやっている記事

https://www.buzzfeed.com/jp/bfj-buzz/t-shirt-program

https://shogo82148.github.io/blog/2023/04/23/2023-04-23-akamai-peace-for-all/

## まとめ

くだらん記事にお付き合いいただきありがとうございました！
よろしければ、いいね、フォローよろしくお願いします！