2011-01-29 24 views
0

誰もGo言語で副作用のある関数を書く方法を知っていますか? Cのgetcharのような意味です。Go言語の副作用

ありがとうございます!

+3

私は、あなたが何をしているかについてより具体的に考える必要があると思います。 Goは関数型言語ではありません。副作用のある関数を書くのを止めるものは何もありません。パッケージos、fmt、netの多くの関数には、例えば副作用があります。 –

答えて

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