猿问

转到通道和 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)



梦里花落0921
浏览 215回答 1
1回答

呼如林

有多个错误:1)与 C 不同,Go 强制您在语句之后直接使用大括号。因此,对于 if 情况(对于 func 也是如此),而不是这样做:if (channel2temp < channel1temp){用这个if channel2temp < channel1temp {2)whileGo 中没有。采用forfor {...}要么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 {&nbsp; &nbsp; panic(err)}除此之外还有更多错误,但也许它会让你开始。我还建议阅读Effective Go,因为它会解释我刚刚提到的许多事情。肯定有在线帮助。它可能是一种新语言,但在线材料确实很有用。以下是我在学习 Go 时使用的一些:Effective Go&nbsp;: 关于如何编写惯用的 Go 代码的好文档Go 编程语言之旅:带有交互式示例的 Go 在线之旅。Go By Example:Go 程序的交互式示例,从 Hello World 开始。Go 规范:作为规范的可读性令人惊讶。也许不是一个起点,但非常有用。
随时随地看视频慕课网APP

相关分类

Go
我要回答