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임
데엥 무슨말인지 하나도 모루겟어 생성형 루틴인가 쓰면 문장 한번으로 해결 가능? - dc App
그럼 앱으로는 뚝딱이지
저거 개간단해서 그냥 터치로도 가능함
근데 허브에서 돌리기에는 무겁지 않나?
현시점으로 보면 나도 그렇게 생각함 동시성은 그렇다치고 같은 작업에 더 많은 메모리관리를 쓰는거 아닐까 추측하게됨
실제 코드라고 보기엔 이상한 부분이 많은데... 출처가?
Go는 인터프리터 스크립트가 아니라서 적용하기가 어려울텐데? 단순히 Go 문법만 차용한 매크로라고 하기엔 하필이면 Go일 이유도 모르겠고 구현이 쓸데없이 복잡해지는데 굳이? 애초에 JSON이었던 이유는 프로그램이 아니라 그냥 매크로 파일 같은거라 그런건데... Go라니 뜬금폰데
답이 없네 "실제 작동하는"이라고 하는데 ㄹㅇ 궁금해서 그러는데
ㄹㅇ 맥거핀이냐? 패키지라고는 포맷터랑 시간 밖에 임포트 안하는데 ㅋㅋㅋ