作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
第一个函数
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/
我是一名优秀的程序员,十分优秀!