我是 Go 的新手,所以我确定这是我所缺少的简单东西。我正在尝试初始化一个通道以从另一个函数捕获用户输入。我尝试了以下内容:package inputconst UP = 1const RIGHT = 2const DOWN =3const LEFT = 4var inputChannel chan inttype InputReader interface { ReadNextInt() int}func InitInputChannel() chan int { inputChannel := make(chan int, 1) return inputChannel}func SendInput(inputReader InputReader) { inputChannel <- inputReader.ReadNextInt()}然后我调用了以下代码:package inputimport ( "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock")type MockedInputReader struct { mock.Mock}func (reader MockedInputReader) ReadNextInt() int { return 1}func TestShouldSendUpValueToChannelWhenUpKeyPressed(t *testing.T) { inputReader := new(MockedInputReader) inputReader.On("ReadNextInt").Return(UP) receiverChannel := SendInput(inputReader) actualInput := <- receiverChannel assert.Equal(t, UP, actualInput)}查看代码我无法找出问题所在,所以我决定重组一些东西,因为我已经绝望了。我最终得到了以下有效的方法:package inputconst UP = 1const RIGHT = 2const DOWN =3const LEFT = 4var inputChannel chan int = make(chan int, 1)type InputReader interface { ReadNextInt() int}func SendInput(inputReader InputReader) chan int { inputChannel <- inputReader.ReadNextInt() return inputChannel}虽然我很高兴它能正常工作,但我很困惑为什么我的第一个解决方案不起作用。当只需要抓取一次时,我也不太愿意为每次 SendInput 调用返回我的频道。也许 'InputChannel() chan int' getter 会更好?有什么见解吗?谢谢
1 回答
暮色呼如
TA贡献1853条经验 获得超9个赞
使用了不正确的变量声明形式。所以应该做这样的事情:
package input
const UP = 1
const RIGHT = 2
const DOWN = 3
const LEFT = 4
var inputChannel chan int
type InputReader interface {
ReadNextInt() int
}
func InitChan() chan int {
inputChannel = make(chan int, 1)
return inputChannel
}
func SendInput(inputReader InputReader) {
inputChannel <- inputReader.ReadNextInt()
}
要注意的关键是“ inputChannel = make(.....) ”,而不是像我之前尝试的那样“ inputChannel := make(....) ”。
- 1 回答
- 0 关注
- 85 浏览
添加回答
举报
0/150
提交
取消