Используйте int как месяц при построении даты golang
когда я поставляю int
в качестве аргумента time.Date
на month
, он работает (пример):
time.Date(2016, 1, 1, 0, 0, 0, 0, time.UTC)
почему, когда я пытаюсь преобразовать string
to int
и затем использовать эту переменную, я получаю ошибку:
cannot use mStr (type int) as type time.Month in argument to time.Date
3 ответов
вы должны преобразовать значение к нужному типу:
import(
"fmt"
"time"
"strconv"
)
func main() {
var m, _ = strconv.Atoi("01")
// Now convert m to type time.Month
fmt.Println(time.Date(2016, time.Month(m), 1, 0, 0, 0, 0, time.UTC))
}
вы преобразовали его в тип int
, но 2-й параметр time.Date()
типа time.Month
Так что это даст вам ошибку, что вы не используете правильный тип.
в первом примере вы объявляете тип как time.Month
, Это не int, это time.Month
. Во втором примере типом является int. Если бы вы сделали бросок, как в этом примере, он работал бы так, как вы ожидаете;https://play.golang.org/p/drD_7KiJu4
если в вашем первом примере вы объявили m
как int
или просто :=
оператор (подразумеваемый тип будет int) и вы получите ту же ошибку, как и во втором примере. Продемонстрированный здесь:https://play.golang.org/p/iWc-2Mpsly
компилятор Go создает константы только для типов самостоятельно. Переменные должны быть явно приведены.