Используйте 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

пример:https://play.golang.org/p/-XFNZHK476

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 создает константы только для типов самостоятельно. Переменные должны быть явно приведены.