開発環境
- macOS Catalina - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Go (プログラミング言語)
入門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 コメント:
コメントを投稿