如果我想睡2秒钟,可以执行以下操作:
time.Sleep(2 * time.Second)
但是当我这样做时:
test := 2
time.Sleep(test * time.Second)
它引发错误
无效操作:测试*时间。第二个(类型不匹配的int和 time.Duration)
我可以通过像这样test
来转换time.Sleep(time.Duration(rand.Intn(5)) * time.Second)
来解决此问题:time.Duration
,但我想知道为什么当它是一个变量而不是它时需要将它包装在import { addItem } from './actions/items';
class App extends Component {
render() {
return (
<div className="App">
// some more tags
</div>
);
}
};
const mapStateToProps = (state) => {
return {
items: state.items
};
};
const mapDispatchToProps = dispatch => {
return {
addItem: () => {
dispatch(addItem())
}
};
};
export default connect(mapStateToProps, mapDispatchToProps)(App);
中原始值?
答案 0 :(得分:5)
区别在于,在const
的第一种情况下传递2 * time.Second
,在声明var
的第二种情况下传递test := 2
。阅读this blog post about constants in Go了解更多详情。
基本上,代码中的const文字将转换为对周围表达式有意义的类型。在第一种情况2 * time.Duration
中,这意味着2
被转换为time.Duration
,而在第二种情况下test := 2
,2
被分配给{{1 }}变量。这意味着类型推断在此时发生,为test
提供类型test
,这是文字int
的默认类型。如果改用文字2
,则2.0
变量的类型应为test
。但是,表达式float64
的类型已经设置为test * time.Second
,它与test
的类型不同,这就是为什么会出现该编译器错误的原因。