a c k a g e m a i n i m p o r t " g i t h u b . c o m / g o m a r t i n i / m a r t i n i " f u n c m a i n ( ) { m : = m a r t i n i . C l a s s i c ( ) m . G e t ( " / " , f u n c ( ) s t r i n g { r e t u r n " H e l l o w o r l d ! " } ) m . R u n ( ) }
o n f i g u r a t i o n c o n f / r o u t e s G E T / u s e r / : i d U s e r s . S h o w Contrôleur: f u n c ( c U s e r s ) S h o w ( i d i n t ) r e v e l . R e s u l t { u s e r : = U s e r B y I d ( i d ) r e t u r n c . R e n d e r ( u s e r ) }
g o . G e t ( " / " , f u n c ( c t x * c o n t e x t . C o n t e x t ) { c t x . O u t p u t . B o d y ( [ ] b y t e ( " h e l l o w o r l d " ) ) } ) Ou b e e g o . R o u t e r ( " / " , & c o n t r o l l e r s . M a i n C o n t r o l l e r { } )
Go Parce que je trouvais pas mon bonheur (surtout à l'époque où j'ai commencé à coder Kwiscale) Parce que j'adore WebApp2 et le principe de Handler J'avais des concepts (de plugins, de performances...) que je retrouvais pas dans les systèmes existants Par défis !
(session dans les cookies ou dans memcache, changer de base de données sans impact, changer de moteur de template facilement, etc.) Compréhensible, on lit, on sait ce que ça fait Orienté "Handler": une structure (classe) a des méthodes nommées comme le verbe HTTP (Get(), Post()...) KISS pour de développeur de site
o g e t u g o p k g . i n / k w i s c a l e / f r a m e w o r k . v 1 g o g e t u g o p k g . i n / k w i s c a l e / f r a m e w o r k . v 1 / k w i s c a l e
e n e w h a n d l e r i n d e x " / " k w i s c a l e n e w h a n d l e r u s e r s " / u s e r s " k w i s c a l e n e w h a n d l e r u s e r s " / u s e r s / { i d : \ d + } " Génère: la configuration de route dans config.yml les 2 handlers "IndexHandler" et "UsersHandler" modifie "main.go" pour ajouter les routes
o u t e s : / : h a n d l e r : h a n d l e r s . I n d e x H a n d l e r / u s e r s : h a n d l e r : h a n d l e r s . U s e r s H a n d l e r / u s e r s / { i d : \ d + } : h a n d l e r : h a n d l e r s . U s e r s H a n d l e r
a c k a g e h a n d l e r s i m p o r t ( " g o p k g . i n / k w i s c a l e / f r a m e w o r k . v 1 " ) f u n c i n i t ( ) { k w i s c a l e . R e g i s t e r ( & I n d e x H a n d l e r ) } t y p e I n d e x H a n d l e r s t r u c t { k w i s c a l e . R e q u e s t H a n d l e r } / / J ' a j o u t e l a m é t h o d e G E T , c e q u ' i l y a a u d e s s u s a é t é c r é é / / p a r l e C L I f u n c ( h a n d l e r * I n d e x H a n d l e r ) G e t ( ) { h a n d l e r . W r i t e S t r i n g ( " H e l l o ! " ) }
h a n d l e r . R e n d e r ( " t e m p l a t e . h t m l " , m a p [ s t r i n g ] i n t e r f a c e { } { " i n f o r m a t i o n " : " F o o " , " m e s s a g e " : " B a r " , } ) De base, c'est un moteur "built-in" basé sur le package html/template de Go qui est utilisé, mais...
pour les templates "Pongo2" (proche de Jinja ou Twig) existe déjà. Dans la configuration: t e m p l a t e : e n g i n e : p o n g o 2 d i r : . / t e m p l a t e s Dans main.go: i m p o r t ( / / . . . _ " g o p k g . i n / k w i s c a l e / t e m p l a t e p o n g o 2 . v 1 " )
le même principe que les templates, Kwiscale fourni une interface de requêtage. i m p o r t ( / / . . . _ " g o p k g . i n / k w i s c a l e / d b m o n g o . v 1 " ) config.yml: d b : e n g i n e : m o n g o u r i : 1 9 2 . 1 6 8 . 1 . 1 n a m e : m y a p p Le plugin s'enregistre de lui-même dans le framework.
t r u c t { N a m e s t r i n g E m a i l s t r i n g P a s s w o r d s t r i n g } / / . . . h a n d l e r . A p p ( ) . D B ( ) . I n s e r t ( & U s e r { N a m e : " P a t r i c e " , E m a i l : " m e t a l 3 d @ g m a i l . c o m " , P a s s w o r d : e n c r y p t ( " X X X X X " ) , } )
e r ) / / R é c u p è r e l ' u t i l i s a t e u r h a n d l e r . A p p ( ) . D B ( ) . F i n d ( k w i s c a l e . Q { " n a m e " : " P a t r i c e " , } ) . O n e ( u ) f m t . P r i n t l n ( " N o m : " , u . N a m e )
des applications scallées) mais... ... comme les templates, et les bases de données, on peut implémenter son système. Par exemple, un plugin pour les sessions dans "memcache" existe déjà:
/ / . . . _ " g o p k g . i n / k w i s c a l e / s e s s i o n m e m c a c h e . v 1 " ) Configuration: s e s s i o n : e n g i n e : m e m c a c h e o p t i o n s : s e r v e r s : 1 9 2 . 1 6 8 . 1 . 1 : 1 1 2 1 1 1 9 2 . 1 6 8 . 1 . 2 : 1 1 2 1 1