Go 语言为Fibonacci函数实现Read方法

Posted vincenshen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go 语言为Fibonacci函数实现Read方法相关的知识,希望对你有一定的参考价值。

Go语言非常灵活,只要为对象实现了相应的方法就可以把他看成实现了某个接口,类似于Durk Type,

为Fibonacci实现Read方法,就可以像读取文件一样,去读取下一个Fibonacci值。

 

示例代码:

ackage main

import (
    "fmt"
    "io"
    "bufio"
    "strings"
    "strconv"
)

func fibonacci() intGen {
    // 斐波那契数列,返回一个intGen类型
    a, b := 0, 1
    return func() int {
        a, b = b, a + b
        return a
    }
}

type intGen func() int    // 定义一个func类型,返回int类型

func (g intGen) Read(p []byte) (n int, err error) {
    // 为intGen实现Read方法,以便printFileContents函数可以对其像读取文件一样操作
    next := g()
    if next > 100000 {
        return 0, io.EOF
    }
    //s := fmt.Sprintf("%d
", next)
    s := strconv.Itoa(next) + "
"

    return strings.NewReader(s).Read(p)    // 利用strings的NewReader方法来实现Read接口
}


func printFileContents(reader io.Reader) {
    // 从reader中读取内容
    scanner := bufio.NewScanner(reader)
    for scanner.Scan() {
        fmt.Println(scanner.Text())
    }
}

func main() {
    f := fibonacci()
    printFileContents(f)
}

 

以上是关于Go 语言为Fibonacci函数实现Read方法的主要内容,如果未能解决你的问题,请参考以下文章

c语言问题啊

c语言问题啊啊

Fibonacci斐波那契数列 C++或go实现

go语言聊天室实现(六)创建HTTP连接,并升级为长连接

Go语言结构体

Go语言结构体