Exercises from the book "The Go Programming Language"
- X := 10 * time.Second
| Program | Purpose |
|---|---|
| a_helloworld | the classic with unicode possible |
| b_echo1 | echo with for i++ loop |
| c_echo2 | echo with for range loop |
| d_echo3 | echo with strings.Join |
| e_exercise-1.2 | echo with index printed |
| f_exercise-1.3 | Benchmark string concat vs join |
| g_dup1 | check dup lines with bufio.NewScanner |
| h_dup2 | bufio.NewScanner now takes *os.File args |
| i_dup3 | read files at once with ioutil.ReadFile |
| j_exercise-1.4 | dup with print filename from map[string]string |
| k_lissajous | GIF animation with scifi sinus waves |
| l_fetch | curl with a few lines |
| m_exercise-1.7 | fetch using io.Copy to stdout |
| n_exercise-1.7b | fetch auto adding http prefix to url |
| o_exercise-1.9 | fetch printing http status code additionaly |
| p_fetchall | fetch in parallel with goroutines |
| q_exercise-1.10 | fetchall with writing contents to files |
| r_server1 | web server doing simple echo |
| s_server2 | web server with request count wieth Mutex |
| t_server3 | web server printing headers and other http infos |
| u_server-gif | web server sending GIF from k_lissajous |
| Program | Purpose |
|---|---|
| a_retpointer | returning a pointer to local var (escape analysis) |
| b_echo4 | echo with flag.Parse() |
| c_cf | celsius fahrenheit type conversion using package tempconv |
| d_bitlevel | shift and mask on binary numbers |
| popcount | counting number of bits set to 1 in a word |
| tempconv | celsius fahrenheit type conversion package |
| Program | Purpose |
|---|---|
| a_surface | creating a SVG graphic with float calculations |
| b_exercise-3.3 | adding color gradient from red to blue |
| c_surfserver | serving svg via http server |
| Program | Purpose |
|---|---|
| a_sha256 | printf sha256 sums of type [32]byte with %x |
| b_exercise-4.1 | counting the bits set diffently in two sha256 sums |
| c_exercise-4.2 | reading all STDIN and printing the sha256 sum of it |
| d_rev | reverse a slice |
| e_exercise-4.3 | reverse array [6]int |
| f_exercise-4.4 | left rotate a slice |
| g_exercise-4.5 | remove adjacent duplicates from string slice |
| h_exercise-4.6 | in place squash unicode spaces into ascii space |
| i_charcount | charcount NewReader(STDIN) ReadRune() |
| j_charclass | count character classes |
| k_wordfreq | count word frequencies with NewScanner / Split ScanWords |
| l_github | github json api client with structs |
| m_issues | command line issue search for github |
| n_exercise-4.10 | classify github issues search results by age new or old |
| o_exercise-4.13 | command line client for movie poster download |
| p_issuesreport | issue rendering with text template |
| q_issueshtml | issue rendering with html template |
| r_exercise-4.14 | web server rendering html issue info |
| Program | Purpose |
|---|---|
| a_findlinks | parse html (stdin) and find links |
| b_exercise-5.1 | findlinks without for loop |
| c_exercise-5.2 | count types of element nodes in map |
| d_exercise-5.3 | parse html TextNodes and print to stdout |
| e_exercise-5.4 | findlinks1 + additionally find other links like images and scripts |
| f_outline2 | print outline of a parsed html tree from url |
| g_exercise-5.7 | pretty printing the parsed html |
| h_exercise-5.8 | implemented getElementById on parsed html tree |
| i_exercise-5.9 | expanding $foo with function argument |
| Program | Purpose |
|---|---|
| a_intset | set of small integers implemented as Bit Vector |
| b_exercise-6.1 | added some methods |
| c_exercise-6.2 | added variadic AddAll Method |
| d_exercise-6.3 | added Intersect and Difference Methods |
| e_exercise-6.4 | added Elems Method returning slice for range loop |
| Program | Purpose |
|---|---|
| a_exercise-7.1 | LineCounter and WordCounter implementing the Writer interface |
| b_exercise-7.2 | CountingWriter returns a Wrapper to a given io.Writer + *counter |
| c_exercise-7.3 | added String Method to tree type |
| d_exercise-7.4 | reimplement strings.NewReader |
| f_tempflag | tempconv command line - celsiusFlag satisfies flag.Value interface |
| g_exercise-7.9 | html table using sort.Interface |
| h_exercise-7.11 | update func adapted to http.Handler interface using DefaultServeMux |
| i_eval | expression evaluator |
| j_exercise-7.13 | add String method to Expr interface |
| k_xmlselect | print the text of xml elements selected py path |
| l_exercise-7.17 | xmlselect also by attributes |
| m_exercise-7.18 | constructing a tree of generic nodes from xml tokens |
| Program | Purpose |
|---|---|
| a_exercise-8.1 | clock server and clients with goroutines |
| b_exercise-8.2 | FTP Server |
| c_exercise-8.3 | netcat3 -> *net.TCPConn.CloseWrite() |
| d_exercise-8.4 | using sync.WaitGroup to count the number of active echo goroutines |
| e_exercise-8.8 | echoserver now has timeout using select statement |
| f_exercise-8.9 | du status updates now seperate for each root |
| g_chatserver | a server broadcasting chat messages to all tcp clients like netcat |
| h_exercise-8.12 | announce set of clients to new arrivals |
| i_exercise-8.13 | added timeout to chat server |
| j_exercise-8.14 | chat servers network protocol now asks for user name |
| Program | Purpose |
|---|---|
| a_exercise-9.1 | withdraw added to bank1 |
| b_exercise-9.5 | found limit of ~ 2.5 mio goroutines with 8GB Memory |
| c_exercise-9.6 | found limit of ~ 4.5 mio messages per second |