2015-01-02 2 views
2

У меня есть следующий код:Как поделиться встроенным указателем структуры

Контроллер структуры, у которого есть анонимные поля.

type controller struct { 
    *base.Controller 
    store *data 
} 

Как вы можете видеть, * base.Controller - это указатель на анонимные поля. Затем вторая структура, состоящая из * base.Controller.

type expiredError struct { 
    *base.Controller 
    local string 
} 

Я инициализации контроллера-структуру следующим образом:

c := &controller{base.New(rw, r, false, "controller/account"), nil} 
c.Title = "Activate account" 
c.serve() 

base.Controller на контроллере инициализации с base.New функции().

Теперь у меня есть методы контроллера, которые инициализируют структуру expiredError и должны делиться указателем base.Controller на base.Controller expiredError тоже.

func (rcv *controller) validate() error { 

    .... 

    // If time for activating account is expired 
    if time.Now().Unix() > rcv.store.Expired { 
     // Delete registered user from neo4j 
     maccount.Delete(rcv.store.Email, rcv.Local) 

     return &expiredError{base.Controller, rcv.Local} 
    } 

    return nil 
} 

У меня здесь ошибка компилятора

type base.Controller is not an expression 
+0

'тип base.Controller не является выражением', означает, что вам нужен экземпляр чего-то, а не тип. – JimB

ответ

3

Вы можете попробовать ссылки на анонимную поле, упоминая экземпляр родительского класса:

rcv.Controller 

(с «именем "анонимного поля совпадает с типом поля)

См. аналогичный пример:

+1

Доступ к встроенным полям возможен только по их имени типа, а имена типов не могут иметь селекторов. Только «rcv.Controller» может работать. – JimB

+1

@JimB действительно. Я отредактировал ответ соответственно. Я должен был знать, так как вчера использовал аналогичный пример в http://stackoverflow.com/a/27733969/6309. – VonC

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