2011-01-29 83 views
0

有誰知道如何在Go語言中編寫帶副作用的函數? 我的意思是說像C中的getchar函數。Go語言的副作用

謝謝!

+3

我認爲你需要更具體地瞭解你的想法。 Go不是一種功能性語言。沒有什麼能夠阻止你編寫帶有副作用的函數。例如,包os,fmt和net中的許多函數都有副作用。 – 2011-01-29 21:32:54

回答

2

在C中,副作用用於有效返回多個值。

在圍棋,返回多個值是內置的功能規格:

func f(a int) (int, int) { 
    if a > 0 { 
     return a, 1 
    } 
    return 0,0 
} 

通過返回多個值,你可以影響任何你喜歡的功能之外,作爲函數調用的結果。

3

ReadByte函數修改緩衝區的狀態。

package main 

import "fmt" 

type Buffer struct { 
    b []byte 
} 

func NewBuffer(b []byte) *Buffer { 
    return &Buffer{b} 
} 

func (buf *Buffer) ReadByte() (b byte, eof bool) { 
    if len(buf.b) <= 0 { 
     return 0, true 
    } 
    b = buf.b[0] 
    buf.b = buf.b[1:] 
    return b, false 
} 

func main() { 
    buf := NewBuffer([]byte{1, 2, 3, 4, 5}) 
    for b, eof := buf.ReadByte(); !eof; b, eof = buf.ReadByte() { 
     fmt.Print(b) 
    } 
    fmt.Println() 
} 

Output: 12345