Exercises from the book "The Go Programming Language"
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
8. Goroutines and Channels
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
9. Concurrency With Shared Variables
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