Go语言中的副作用

huangapple go评论87阅读模式
英文:

Side Effects in Go Language

问题

有人知道如何在Go语言中编写具有副作用的函数吗?
我的意思是像C语言中的getchar函数那样。

谢谢!

英文:

Does anyone know how to write a function with side effects in the Go language?
I mean like the getchar function in C.

Thanks!

答案1

得分: 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()
}

输出:12345
英文:

The ReadByte function modifies the state of the buffer.

package main

import &quot;fmt&quot;

type Buffer struct {
	b []byte
}

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

func (buf *Buffer) ReadByte() (b byte, eof bool) {
	if len(buf.b) &lt;= 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

答案2

得分: 2

在C语言中,副作用被用于有效地返回多个值。

在Go语言中,返回多个值已经内置在函数的规范中:

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

通过返回多个值,你可以在函数调用的结果中影响任何你喜欢的东西。

英文:

In C, side effects are used to effectively return multiple values.

In Go, returning multiple values is built into the specification of functions:

func f(a int) (int, int) {
    if a &gt; 0 {
        return a, 1
    }
    return 0,0
}

By returning multiple values, you can influence anything you like outside of the function, as a result of the function call.

huangapple
  • 本文由 发表于 2011年1月29日 15:56:24
  • 转载请务必保留本文链接:https://go.coder-hub.com/4835778.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定