![](/img/trans.png)
[英]What can possibly go wrong when halting the JVM while a thread is doing I/O?
[英]Go channels and I/O
第一功能
读F2C
接收文件名和通道,从文件读取并在通道中输入。 第二功能
写C2F
占用2个通道和文件名,获取每个通道的值,并将较低的值保存在输出文件中。 我确定有一些语法错误,但是我是GO的新手
package main
import (
"fmt"
"bufio"
"os"
"strconv"
)
func main() {
fmt.Println("Hello World!\n\n")
cs1 := make (chan int)
var nameinput string = "input.txt"
readF2C(nameinput,cs1)
cs2 := make (chan int)
cs3 := make (chan int)
cs2 <- 10
cs2 <- 16
cs2 <- 7
cs2 <- 2
cs2 <- 5
cs3 <- 8
cs3 <- 15
cs3 <- 14
cs3 <- 1
cs3 <- 6
var nameoutput string = "output.txt"
writeC2F (nameoutput,cs2,cs3)
}
func readF2C (fn string, ch chan int){
f,err := os.Open(fn)
r := bufio.NewReader(f)
for err != nil { // not end of file
fmt.Println(r.ReadString('\n'))
ch <- r.ReadString('\n')
}
if err != nil {
fmt.Println(r.ReadString('\n'))
ch <- -1
}
}
func writeC2F(fn string, // output text file
ch1 chan int, // first input channel
ch2 chan int){
var j int = 0
var channel1temp int
var channel2temp int
f,_ := os.Create(fn)
w := bufio.NewWriter(f)
channel1temp = <-ch1
channel2temp = <-ch2
for j := 1; j <= 5; j++ {
if (channel2temp < channel1temp){
n4, err := w.WriteString(strconv.Itoa(channel1temp))
} else{
n4, err := w.WriteString(strconv.Itoa(channel2temp))
}
w.flush()
}
}
这是我收到的错误消息:
prog.go:38: multiple-value r.ReadString() in single-value context
prog.go:65: w.flush undefined (cannot refer to unexported field or method bufio.(*Writer)."".flush)
有多个错误:
1)
与C不同,Go强制您在语句后直接使用花括号。 因此,对于if情况(与func相同),而不是这样:
if (channel2temp < channel1temp)
{
用这个
if channel2temp < channel1temp {
2)
Go中没有while
。 for
for {
...
}
要么
for channel1temp != null || channel2temp != null {
...
}
3)
未声明变量的用法。 通常,通过在首次初始化变量时进行简短的变量声明即可轻松解决。 所以代替:
r = bufio.NewReader(file)
采用
r := bufio.NewReader(file)
4)
尝试分配多值返回到单个变量。 如果一个函数返回两个值,而您只需要一个值,则可以通过将不需要的变量分配给_
来丢弃它。 所以代替:
file := os.Open(fn)
采用
file, _ := os.Open(fn)
但最佳做法是捕获该错误:
file, err := os.Open(fn)
if err != nil {
panic(err)
}
除此之外,还有更多错误,但也许它可以帮助您入门。 我还建议阅读“ 有效的Go”,因为它将解释我刚才提到的许多事情。
编辑:
并且肯定有在线帮助。 它可能是一种新语言,但是在线资料确实有用。 以下是我学习Go时使用的一些技巧:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.