Go  :    Senior
 


Go  ,    .          ,       ,    ,           .

      .  ,      ,    :       GMP-, escape analysis   .      ,     ,    ,       ,      .

     :  ,       .       ,     Go    ,   .     ,           .





Go  :    Senior





 1. Go    C++   




  2007 ,  Google.  ,         C++ .   .   ,    .  ,  Unix, Plan 9  Inferno,     :    ,   ,               .



  Go.     ,   .  ,           .

   



,   :   Go    ,   .       ,    C++, Java  Python.   ,  ,  ,   ,    ,  .   ,      ,  ,               .



    : Go      .       Go,   ,       .      ,  .  ,   .  ,           .  ,           .

  



 -     . ,  ,  .      .  ,    ,  -     .           ,     ,       .



Go   .    .    Service  Logger-,   Service  Logger .     .   ,         .



      .       ,  .   ,   Go  ,           .

  



        .  try-catch-finally,         , Go     .     ,       .



,        if err != nil.    ,   .     .    ,    ,  -    .   ,      ,   .  ,   .



 ,       .   ,        .    errors   ,    .    :    ,        .

   



 ,   : .      ,         .  Go     .   range    , ,   .       .   :       ,  .       .



    zero value.  Go ,   ,      .   ,    ,   nil.   ,    .  ,    ,   zero value      .    sync.Mutex     ,    init.   ,   ,   .

  



   Go   ,      .  2022    ,   ,     .   Go        ,    -.      ,             ,     Go,   C++   Go.

   



    Go          .  :      .     .    .    .  ,     ,        ,         .



,   ,      :  ,      nil-.    .    . Zero value     nil.   nil- ,  zero value .   ,         -.    ,   zero value     .




 2.    




     ,     .   Go  ,       ,   ,        .    ,    ,   ,  ,     .

   



   .     ,    ,    .    ,     -   .      .    .            ,   .         .



 ,   Go  ,    ,   C  C++.                   .          .   Go              ,  .

 :   



 ,        Go.    :       .   receiver     ? ?.        .



   .      ,  .    ,           .    :    value receiver,  ,     .



    .   ,            .     ,    .       ,      .        ,     .      -     ,    GC.     64128 ,     .



    .  ,      .     sync.Mutex.    ,      ,   .        .      . Go     go vet,  ,    .     sync.WaitGroup,         ,    .

   



  Senior        ,    .  ,    Ultimate Go,   value semantics  pointer semantics.    ,      .



  ,      .           ,   .     :    ,   ,    .  ,      .



    .               .   .  ,          .



 ,    :        .     value receiver  pointer receiver   .            , ,        .                  .

  :  



  ,     .   ,              .    .



  ,     .     pointer receiver,      ,    . -      .     .  :    ,    ,  .      ,        .



, Go     ,      pointer receiver  -.               .  ,     ,      .

   



  :         ,   .  ,            .      ,     .



        :  receiver    .   ,      ,  ,   .




 3.   




 ,  Senior-  .      Go.    ,     .



         .  ,     ,          .       GMP-,   ,         .

  



   :     .           .      ,   .    ,         .        .    .         ,            .



    . , promises, event loop.          .   ,       ,   .        ,   -.     API   .     ,   ,       .



Go   .     ,   ,       .    ,    go,        ,     :



func handleClient(conn net.Conn) {

data := readRequest(conn)   // ,  

result := queryDB(data)      // ,  

conn.Write(result)           // ,  

}



go handleClient(clientConn)



   .   ,           ,      .        .            .

  : GMP



,      . G   .  ,  ,   :      ,        .      ,    ,      .



M   machine,   . , ,    . M   .      M          .



P   processor,   Go.       ,     ,    ,   ,   G  M.  P   GOMAXPROCS       .     , GOMAXPROCS   ,   ,            .



   ,       P,      .    ,     .  M ,         P.   ,     .    ,       P.    work stealing       .

    ,    



 Go  .     ,     .     ,    :  ,   ,   ,   .



  Go 1.14   .         ,       .  ,     P, .   1.14   :       ,       .       ,        .



      :  ,      ,     ,    select?.  :  select   ,    .    for  select    .  Go 1.14      -     P.  1.14    ,      P       ,   .

    



    ,     -.



    . ,    .  ,     .     ,    M.      M   .    P   M,  P  ,  M,   .    ,      P.   ,    .



    .   ,   ,  .  Go  netpoller   ,     -  ,   epoll  Linux.      ,    M.      netpoller-  . M      .    , netpoller          .



  Go     .   ,    ,        ,         netpoller-    .

    



  ,     ,     .   .      ,    .          ,  ,     .      .



 ,       ,    .         .    ,     .



 :         ,        -.      ,     GOMAXPROCS    ,    .

   



    GMP,     .   ,   .         . ,   ,    ,     .



,  M   P      netpoller      .  work stealing   .   ,      :   ,     ,      -,    ,      ,   ,        P.



       :  ,     C-  cgo?.  : cgo-     Go    M   .    cgo-         GOMAXPROCS,        .






 4. : ,    




         ,  Go  .    ,  Go  .    ,        ,  ,    ,     .



,     Go,   ,   ,    .  ,     ,       ,  .

 ,  



     ,         .



    .    , ,  .            .     ,  .       ,     ,        ,        .



   .      ,      .     ,      .    ,         ,   .   ,        .          ,    .



   .      ,   .     ,        .      ,  .      ,         .

 ,   



  ,  C  C++,   ,   :       ,  malloc  new   .  Go    .               .



   ,   ,      ,       .  :           ,   : ,    ,    ,    .




  .


   .

   ,     (https://www.litres.ru/book/raznoe/go-na-sobesedovanii-ot-novichka-do-senior-74310082/)  .

      Visa, MasterCard, Maestro,    ,   ,     ,  PayPal, WebMoney, ., QIWI ,       .


