利用channel和
Goroutine
简单的模拟对日志的并发处理
package main
import (
"fmt"
"strings"
"time"
)
//定义结构体
type LogProces struct {
rc chan string //读取数据的通道
wc chan string //写入数据的通到
path string //读取的文件操作
}
/**
从文件中读取数据,放入rc通道
*/
func (l *LogProces) ReadFromFile() {
line := "message"
l.rc <- line
}
/**
从rc通道获取数据,并且处理,转化为大小,放入wc通道
*/
func (l *LogProces) Process() {
data := <-l.rc
l.wc <- strings.ToUpper(data)
}
/**
从wc通道读取,输出
*/
func (l *LogProces) WriteToDB() {
info := <-l.wc
fmt.Println(info)
}
/**
并发模拟日志读取并且处理显示
*/
func main() {
lp := &LogProces{
rc: make(chan string),
wc: make(chan string),
path: "/temp/access.log",
}
go lp.ReadFromFile()
go lp.Process()
go lp.WriteToDB()
time.Sleep(1 * time.Second)
}
运行结果:
D:\workplace\henry>go run logOperation.go
MESSAGE
D:\workplace\henry>go run logOperation.go