Io Go通道和I/O
第一功能 ReadF2C 获取文件名和通道,读取文件并在通道中输入。 第二功能 WriteC2F 获取2个通道和文件名,获取每个通道的值,并将较低的值保存在输出文件中。我肯定有一些语法错误,但我是新手Io Go通道和I/O,io,go,channel,Io,Go,Channel,第一功能 ReadF2C 获取文件名和通道,读取文件并在通道中输入。 第二功能 WriteC2F 获取2个通道和文件名,获取每个通道的值,并将较低的值保存在输出文件中。我肯定有一些语法错误,但我是新手 package main import ( "fmt" "bufio" "os" "strconv" ) func main() { fmt.Println("Hello World!\n\n") cs1 := make (chan int)
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()
}
}
有多个错误: 1) 与C不同,Go强制您在语句后直接使用花括号。因此,对于if情况(func也是如此),不要这样做:
if (channel2temp < channel1temp)
{
或
3)
非声明变量的使用。通过在第一次初始化变量时进行简短的变量声明,通常很容易修复。因此,不是:
r = bufio.NewReader(file)
file := os.Open(fn)
使用
4)
尝试将多值返回赋值到单个变量中。如果一个函数返回两个值,而您只需要一个值,则可以通过将不需要的变量赋给\uu
来丢弃该变量。因此,不是:
r = bufio.NewReader(file)
file := os.Open(fn)
使用
但最佳做法是捕捉错误:
file, err := os.Open(fn)
if err != nil {
panic(err)
}
除此之外还有更多的错误,但也许这会让你开始。
我还建议阅读,因为它可以解释我刚才提到的许多事情
编辑:
file, err := os.Open(fn)
if err != nil {
panic(err)
}
当然,网上也有帮助。它可能是一种新的语言,但在线材料确实很有用。以下是我在学习围棋时使用的一些方法:
- :关于如何编写惯用Go代码的好文档
- :带互动示例的围棋在线教程
- :Go程序的交互式示例,从Hello World开始
- :作为规范,其可读性令人惊讶。也许不是一个起点,但非常有用
r.Readstring()
返回两个值,因此不能直接将值放入通道中。首先读取s,err:=r.ReadString('\n')
,然后进行错误检查,然后将值(s
,在我的例子中)放入通道。第65行是一个简单的区分大小写的错误:使用w.Flush()
而不是w.Flush()
。一旦真正开始编码,您就必须处理语法错误,所以现在是开始的最佳时机。
file := os.Open(fn)
file, _ := os.Open(fn)
file, err := os.Open(fn)
if err != nil {
panic(err)
}