为什么需要将变量转换为持续时间而不是原始整数?

时间:2018-08-29 05:54:44

标签: go

如果我想睡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); 中原始值?

1 个答案:

答案 0 :(得分:5)

区别在于,在const的第一种情况下传递2 * time.Second,在声明var的第二种情况下传递test := 2。阅读this blog post about constants in Go了解更多详情。

基本上,代码中的const文字将转换为对周围表达式有意义的类型。在第一种情况2 * time.Duration中,这意味着2被转换为time.Duration,而在第二种情况下test := 22被分配给{{1 }}变量。这意味着类型推断在此时发生,为test提供类型test,这是文字int的默认类型。如果改用文字2,则2.0变量的类型应为test。但是,表达式float64的类型已经设置为test * time.Second,它与test的类型不同,这就是为什么会出现该编译器错误的原因。