2016-10-20 5 views
-2

Этот код не работает, поскольку количество типов не является int, я хочу знать, почему go не знает, как обращаться с этим нестандартным типом? Я знаю, что var x amount = 8 исправит эту функцию, потому что она хочет получить сумму, но мой учитель настаивает, что обе эти функции эквивалентны на 100%, на мой взгляд, они не из-за вышеупомянутой ошибки типа.Golang: функция цепочки для возврата

Я надеюсь, что кто-то может мне помочь.

type amount int 
func main() { 

    x := 8 
    y := foo(x) 
    fmt.Println(y) 
} 

func foo(x amount) amount { 
    return x * x 
} 

Этот код действительно работает, кажется, такой же состав.

func Auth1(h http.HandlerFunc) http.HandlerFunc { 
    return func(w http.ResponseWriter, req *http.Request){ 
     fmt.Println("here is the authorization code") 
     c := mcookie.GetCookie(req) 
     cl := db[c.Value] 
     if !cl.Loggedin { 
      http.Redirect(w, req, "/", http.StatusSeeOther) 
     } 
     h(w, req) 
    } 
} 

ответ

2

Функция Foo() ожидает в количество типа в качестве параметра, все, что вам нужно сделать, это, это передать х как количество, например: y := foo(amount(x))

рабочий пример: https://play.golang.org/p/xkbp43vjyA

In Go тип очень важен, например, если вы создаете тип сумма заключается в том, что вы можете добавить больше поведения, чем int определение методов, поэтому, если ваша функция получает сумма, вы должны передать этот тип независимо от того, совместим ли он с int или нет.

+0

Я знаю это, я добавил, что это тоже исправить функцию, var x amount = 8 –

+1

Итак, важно правило, чтобы понять о константах чисел, таких как '8'. У них вообще нет типа, если они сами по себе, и компилятор будет принуждать их к любому типу, который действительно способен содержать номер. Однако, как только они назначены переменной, этот _variable_ имеет конкретный и неизменяемый тип и должен быть явно преобразован в любой другой конкретный (неинтерфейсный) тип. Назначение shortform 'x: = 8' эквивалентно' var x = 8', с типом, который ушел и оставил компилятору. В отсутствие типа целочисленные значения по умолчанию имеют тип 'int'. – Kaedys

+1

Это может оказать влияние на циклы 'for', между прочим. Форма 'для x: = 0; x Kaedys

Смежные вопросы