为了账号安全,请及时绑定邮箱和手机立即绑定

转到通道和 I/O

转到通道和 I/O

Go
梦里花落0921 2021-07-28 17:49:58
第一个函数阅读F2C获取文件名和通道,从文件中读取并在通道中输入。第二个功能写C2F获取 2 个通道和文件名,获取每个通道的值并将较低的值保存在输出文件中。我确定有一些语法错误,但我是 GO 新手package mainimport (    "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 filech1 chan int, // first input channelch2 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 contextprog.go:65: w.flush undefined (cannot refer to unexported field or method bufio.(*Writer)."".flush)
查看完整描述

1 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

有多个错误:


1)


与 C 不同,Go 强制您在语句之后直接使用大括号。因此,对于 if 情况(对于 func 也是如此),而不是这样做:


if (channel2temp < channel1temp)

{

用这个


if channel2temp < channel1temp {

2)


whileGo 中没有。采用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)

}

除此之外还有更多错误,但也许它会让你开始。我还建议阅读Effective Go,因为它会解释我刚刚提到的许多事情。

肯定有在线帮助。它可能是一种新语言,但在线材料确实很有用。以下是我在学习 Go 时使用的一些:

  • Effective Go : 关于如何编写惯用的 Go 代码的好文档

  • Go 编程语言之旅:带有交互式示例的 Go 在线之旅。

  • Go By Example:Go 程序的交互式示例,从 Hello World 开始。

  • Go 规范:作为规范的可读性令人惊讶。也许不是一个起点,但非常有用。


查看完整回答
反对 回复 2021-08-02
  • 1 回答
  • 0 关注
  • 214 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信