Go-lang's decentralized library system
Down a rabbit hole - Go-lang and its decentralized CPAN

    I have been in a rabbit hole for the last week.  I started by looking at Docker
(See my previous post).  It turns
out Docker is written in Go and so somehow I ended up learning
Go.  Well “learning” is an overstatement.  I’ve read
about it for a few days and wrote a tiny bit of code.

But anyway, the coolest thing about Go so far is its decentralized libraries.
Centralized collections of libraries have been all the rage the last few years
and it seems like all the languages have gotten hip to that – CPAN, rubygems,
pypi, npm, etc.

But one of the biggest problems with publishing Perl modules on CPAN is how
difficult it is to do.  Sure its easy after you figure out the PAUSE website
exists, create a PAUSE account, read all the Dist::Zilla docs and some of the
source code, and write your own personalized plugin.  After that it just takes
one little command.

How it works in Go

If you want to use some libraries in your Go code, it looks like this:

import (
    "log" 
    "time"
    "errors"
    "github.com/dotcloud/docker"
    "github.com/fsouza/go-dockerclient"
)


The first 3 are core libraries distributed as part of Go.  But the last two you
have to download and install yourself.  Doing that is very simple:

export GOROOT=$HOME/go
go get github.com/dotcloud/docker


This downloads all the dependencies too.  Of course.

The next question you will ask me is how do people learn about new libraries in
a decentralized world?  There are websites like
http://gowalker.org/ which scrape GitHub’s recent updates
page.  They also do this for BitBucket, Google Project Hosting, and a couple
other sites.

This new language has shiny modern features and is very easy to get up and
running.

                              ,'#@@@@@@@#+';;;''#@@@@@#,                            
                          ;@@@@#;.                    '@@@;                         
                       ;@@@:                             ,@@@                       
                     #@@.                                   +@@                     
                   @@+                                        +@;   +@@@@@#         
         ,,      +@+                               #@@@@+       @@@@#  @@       
     .@@@@@@@@' @@      .+@@@+.                 :@        @,     @@         @@      
    @@:      .@@;     ++       #+              @            @     #@         @@     
   @@         @;               @            @              @     @@         @     
  ;@         @#    ,:             '        @                @     @' :    #+    
  @         +@     ;               '        ;                  ,     @@@@;    ,@    
  @      '' @     @                 @       #                  @     '@@@@     @    
 :@     @@@@:    :                   .     ,                          @@@@     @    
 ;#     @@@@     @                   @     #  +@@@:             +     ,@@     ,@    
 :@     @@@    : ,@@@@             +     @ #@@@@@:            @      @    @;    
  @     .@@     @@@@@                  @ @@@@@@@            @      :@     @     
  @      @,     . @@@@@@@                  @ @@@@@:@            @       @    @:     
  ;@     @      . @@@@@.@.                 @ @@@@@            #       #' .@'      
   @@   '#       @@@@ ,            :     ; ,@@@@@             :       @@.       
    @@. @.       # @@@@@'            @      ;  #@#             :         @:         
     ,@@@        @  '@#.             +      @                  @         @:         
       .@         :                 '        @                '          :@         
       '#         +                 ;         '              .,           @         
       @:          @               @  @@@@@@,  @            ;,            @         
       @          @             @  @@@@@@@@.  @:        .@              @,        
       @             ;+         #,  #@@@@@@@@'    +@+::+@#                ++        
       @               ;@;,.,'@:    @@@@@@@@@@:                           :@        
       @                          #, ,@@@@@@   @                           @        
      .@                         @              '                          @        
      ;#                                       @                         @        
      ++                        :                ;                         @        
      +'                                         '                         @        
      #:                         @    ;@;@'@     @                         @      
      @,                          :+''   @  .@@@:                          @.       
      @,                                 @   :                             @.       
      @.                            ,    @   .                             @,       
      @,                            ;    @                                 @,       
      @,                            '    @                                 @:       
      #:                            :    @                                 @:       
      #;                             +  @ :  @                             @:       
      ++                              +;   ;.                              @:       
      ;#                                                                   @:       
      ,@                                                                   @:       
       @                                                                   @:       
       @                                                                   @,       
       @                                                                   @,       
       @                                                                 @,       
       @,                                                                  @,       
       +'                                                                  @,       
       :@                                                                  @:       
       .@                                                                  @:       
        @                                                                  @:       
        @                                                                  #;       
        @                                                                  #;       
        @                                                                  +@@,     
      '#@                                                                  '+  ;@.  
   +@.  @                                                                  '#     @ 
 ';     @                                                                  ;@      @
.       @                                                                  :@      #
@       @                                                                  ,@    @ @
+ @  ,@                                                                  .@@    # 
 @    ':@                                                                   +; .+ 
 ,.  @ .@                                                                   @     
   ;   .@                                                                   @       
       ,@                                                                   @       
       :@                                                                   @       
       ;#                                                                   @       
       '#                                                                   @       
       '+                                                                   @       
       +'                                                                   @       
       #;                                                                   @       
       #;                                                                   @       
       @:                                                                   @     
       @:                                                                   @.      
       @,                                                                   @,      
       @,                                                                   @,      
       @,                                                                   @,      
       @,                                                                   @,      
       @.                                                                   @.      
       @.                                                                   @     
       @.                                                                   @       
       @.                                                                   @       
       @,                                                                   @       
       @,                                                                   @       
       @,                                                                  .@       
       @,                                                                  '#       
       @:                                                                  @:       
       @:                                                                  @        
       #;                                                                  @        
       +'                                                                 ,@        
       '+                                                                 #'        
       ,@                                                                 @         
        @                                                                         
        @.                                                               @'         
        ;@                                                               @          
         @                                                              +@          
         '@                                                             @           
          @,                                                           #@           
          .@                                                           @            
           #@                                                         @:            
            @#                                                       @#             
             @+                                                     @@              
              @#                                                  .@@               
               @@@#                                              @   .#             
             ''    #                                            @      @            
            @       @                                          @        '           
           @         @                                       @@+        ;           
          :   .       @+                                  :@@+  +.    @  +          
          @  @      @, #@@;                            ;@@@,     ;    .  @          
          ' @     ':     ,@@@#:                   :+@@@@:         #    @ @          
          @ :    #           ;@@@@@@@#####@@@@@@@@@+.              @   ; .          
           @    @                  ,:;''';;:,                     @  #,           
            ;@##                                                     `             

(the golang mascot)


  
  
    Nice!  You read all the way to the bottom of this post. You might find my
    book Minimum Viable Perl useful. It contains concise tutorials for
    experienced developers.  Its free, open source, and a work in progress.  
    Subscribe to get new
    chapters in your inbox.
  
  