a65614aa1f06b3679234254958c12a3ae31061529cdd2103ec2525

SmartThings에 연결된 전자레인지와 공기청정기로

동시성 프로그래밍을 활용해서
시뮬레이션이 켜지면 전자레인지가 작동하고 전자레인지가 다 작동하면 바로 공기청정기가 작동하도록 함
그리고 다 끝나면 10초뒤에 시뮬레이션 끄는 루틴임

package main

import (
    "fmt"
    "time"
)

func runMicrowave(apChan chan string) {
    fmt.Println("Microwave: Cooking started...")
    time.Sleep(time.Second) // Simulate work
    fmt.Println("Microwave: Done!")
    apChan <- "Microwave: Job finished! Turning on air purifier..."
}

func runAirPurifier(apChan chan string) {
    for msg := range apChan {
        fmt.Printf("Air Purifier: Received event (%s...)\n", msg[:10])
        time.Sleep(2 * time.Second) // Simulate work
        fmt.Println("Air Purifier: Job finished! Turning off...")
    }
}

func main() {
    apChan := make(chan string)
    fmt.Println("Simulation starts!")
    go runAirPurifier(apChan)

    // Trigger microwave two seconds later.
    go func() {
        time.Sleep(2 * time.Second)
        runMicrowave(apChan)
    }()

    for {
        select {
        case <-time.After(10 * time.Second):
            fmt.Println("Simulation ends!")
            // Close the channel gracefully.
            close(apChan)
            return
        }
    }
}



가독성이 정말 좋은 코드인듯

apchan이라는 오브젝트에 문자열 메시지를 때려주는걸로 작동함

근데 이게 실제로 돌아가려면 어떤걸 설치하고 헤더에 어떤 라이브러리를 써야하는지 안나옴

테스트는 goplayground라는 웹 ide에서 한듯?

사용법 안알려줬으니 쓸 방법은 없지만
스마트싱스 내부에서는 go를 도입한 루틴도 만들어 보고 있는거로 보임.

참고로 기존 루틴은 json임