2020年5月13日水曜日

開発環境

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

コード

package main

import "fmt"

func source(sSlice []string, downstream chan<- string) {
 for _, s := range sSlice {
  downstream <- s
 }
 close(downstream)
}
func filter(upstream <-chan string, downstream chan<- string) {
 pre := ""
 for s := range upstream {
  if s != pre {
   downstream <- s
   pre = s
  }
 }
 close(downstream)
}
func p(upstream <-chan string) {
 for s := range upstream {
  fmt.Println(s)
 }
}
func main() {
 s := []string{
  "go",
  "gopher",
  "gopher",
  "python",
  "perl",
  "perl",
  "python",
  "c",
 }
 c0 := make(chan string)
 c1 := make(chan string)
 go source(s, c0)
 go filter(c0, c1)
 p(c1)
}

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

% go build removeidentical.go 
% ./removeidentical 
go
gopher
python
perl
python
c
% ./removeidentical
go
gopher
python
perl
python
c
% 

0 コメント:

コメントを投稿