COS418 Assignment 1 (Part 1): Intro to Go


In this assignment you will solve two short problems as a way to familiarize yourself with the Go programming language. We expect you to already have a basic knowledge of the language. If you're starting from nothing, we highly recommend going through the Golang tour before you begin this assignment. Get started by installing Go on your machine. In this class we will use the latest stable version 1.9.


You will find the code for this assignment here under the go-intro directory. The two problems that you need to solve are in q1.go and q2.go. You should only add code to places that say TODO: implement me. Do not change any of the function signatures as our testing framework uses them.

Q1 - Top K words: The task is to find the K most common words in a given document. To exclude common words such as "a" and "the", the user of your program should be able to specify the minimum character threshold for a word. Word matching is case insensitive and punctuations should be removed. You can find more details on what qualifies as a word in the comments in the code.

Q2 - Parallel sum: The task is to implement a function that sums a list of numbers in a file in parallel. For this problem you are required to use goroutines (the go keyword) and channels to pass messages across the goroutines. While it is possible to just sum all the numbers sequentially, the point of this problem is to familiarize yourself with the synchronization mechanisms in Go.


Our grading uses the tests in q1_test.go and q2_test.go provided to you. To test the correctness of your code, run the following:

  $ cd go-intro
  $ go test

If all tests pass, you should see the following output:

  $ go test
  ok      /path/to/go-intro   0.009s


Submit your code to the dropbox for this assignment by 11:59pm 9/21 (Thurs). You may submit multiple times, but only the one in the dropbox at the time of grading will be recorded. You should receive full credit as long as the tests pass and you did not modify the test files or hardcode the results. Additionally, for question 2, we will verify that your code uses channels and goroutines and deduct points if it doesn't.

Last updated: 2017-09-13 17:29:54 -0400