2020年2月17日月曜日

開発環境

入門Goプログラミング (Nathan Youngman(著)、Roger Peppé(著)、吉川 邦夫(監修, 翻訳)、翔泳社)のUNIT 7(並行プログラミング)、LESSON 31(競合状態)の練習問題-1の解答を求めてみる。

コード

package main

import (
 "fmt"
 "image"
 "time"
)

var count int = 1

func worker() {
 pos := image.Point{X: 10, Y: 10}
 direction := image.Point{X: 1, Y: 0}
 d := time.Second / 2
 next := time.After(d)
 for {
  select {
  case <-next:
   pos = pos.Add(direction)
   fmt.Printf("%v回 現在位置: %v (%v秒)\n", count, pos, time.Now().Second())
   count++
   next = time.After(d)
  }
 }
}
func main() {
 go worker()
 time.Sleep(time.Second * 10)
}

入出力結果(Zsh、PowerShell、Terminal)

% go run ./positionworker.go
1回 現在位置: (11,10) (8秒)
2回 現在位置: (12,10) (8秒)
3回 現在位置: (13,10) (9秒)
4回 現在位置: (14,10) (9秒)
5回 現在位置: (15,10) (10秒)
6回 現在位置: (16,10) (10秒)
7回 現在位置: (17,10) (11秒)
8回 現在位置: (18,10) (11秒)
9回 現在位置: (19,10) (12秒)
10回 現在位置: (20,10) (12秒)
11回 現在位置: (21,10) (13秒)
12回 現在位置: (22,10) (13秒)
13回 現在位置: (23,10) (14秒)
14回 現在位置: (24,10) (14秒)
15回 現在位置: (25,10) (15秒)
16回 現在位置: (26,10) (15秒)
17回 現在位置: (27,10) (16秒)
18回 現在位置: (28,10) (16秒)
19回 現在位置: (29,10) (17秒)
% go run ./positionworker.go
1回 現在位置: (11,10) (19秒)
2回 現在位置: (12,10) (19秒)
3回 現在位置: (13,10) (20秒)
4回 現在位置: (14,10) (20秒)
5回 現在位置: (15,10) (21秒)
6回 現在位置: (16,10) (21秒)
7回 現在位置: (17,10) (22秒)
8回 現在位置: (18,10) (22秒)
9回 現在位置: (19,10) (23秒)
10回 現在位置: (20,10) (23秒)
11回 現在位置: (21,10) (24秒)
12回 現在位置: (22,10) (24秒)
13回 現在位置: (23,10) (25秒)
14回 現在位置: (24,10) (25秒)
15回 現在位置: (25,10) (26秒)
16回 現在位置: (26,10) (26秒)
17回 現在位置: (27,10) (27秒)
18回 現在位置: (28,10) (27秒)
19回 現在位置: (29,10) (28秒)
% 

0 コメント:

コメントを投稿