gpt4 book ai didi

io - 转到 channel 和 I/O

转载 作者:数据小太阳 更新时间:2023-10-29 03:33:33 25 4
gpt4 key购买 nike

第一个函数

ReadF2C

获取文件名和 channel ,从文件中读取并在 channel 中输入。第二个功能

WriteC2F

获取 2 个 channel 和文件名,获取每个 channel 的值并将较低的值保存在输出文件中。我确定有一些语法错误,但我是 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 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 时使用的一些:

关于io - 转到 channel 和 I/O,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22900778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com