Skip to content

Latest commit

 

History

History
99 lines (77 loc) · 4.81 KB

README.md

File metadata and controls

99 lines (77 loc) · 4.81 KB

Network Programming with Go

Code repository for Network Programming with Go from No Starch Press.

Although this book was targeted for developers familiar with the Go programming language, it's reasonable to assume that you may have picked it up early in your journey of mastering Go. If you aren't comfortable running the tests and examples presented in the book you can either clone this repository and run it on your operating system's command line, or run them in a Docker container.

Running the examples on your command line:

Make sure you have git installed on your command line. If not, these instructions should get you started.

First, clone this repository by clicking on the green Code button near the top of this page and selecting the appropriate command. To clone the repository over HTTPS, run:

git clone https://github.com/awoodbeck/gnp.git

To clone the repository over SSH, run this command:

git clone [email protected]:awoodbeck/gnp.git

Once cloned, you can change into the gnp directory and run all of the tests, like so:

cd gnp
go test -timeout 300s -race -bench=. ./...

Alternatively, run the tests from a single chapter:

go test -v -timeout 300s -race -bench=. ./ch03/dial_fanout_test.go

Run examples in a Docker container:

First, ensure Docker is installed by following instructions for your operating system.

Next, install the latest docker-buildx release for your operating system.

Then, clone this repository and build the gnp docker container by running the following commands in the gnp directory:

git clone [email protected]:awoodbeck/gnp.git
cd gnp
docker-buildx build -t gnp .

Once finished, you should see a gnp image in the output of the docker image ls command, like this:

$ docker image ls                                                                                                                                                                                             ✗ master
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
gnp          latest    ce9980c7834f   8 minutes ago    1.07GB

Finally, you can run the container using the docker run --rm -it gnp bash command. You should find yourself at a bash prompt where you can run the tests by issuing the go test -race ./... command, for example, as seen below:

root@7f00d5d8ad21:/usr/src/gnp# go test -race ./...
?       github.com/awoodbeck/gnp/ch06/sha512-256sum     [no test files]
?       github.com/awoodbeck/gnp/ch06/tftp/tftp [no test files]
?       github.com/awoodbeck/gnp/ch07/creds     [no test files]
?       github.com/awoodbeck/gnp/ch07/creds/auth        [no test files]
ok      github.com/awoodbeck/gnp/ch03   21.764s
ok      github.com/awoodbeck/gnp/ch04   0.067s
ok      github.com/awoodbeck/gnp/ch05/echo      11.039s
ok      github.com/awoodbeck/gnp/ch06/tftp      0.030s
ok      github.com/awoodbeck/gnp/ch07/echo      0.021s
ok      github.com/awoodbeck/gnp/ch08   5.733s
ok      github.com/awoodbeck/gnp/ch09   0.019s
ok      github.com/awoodbeck/gnp/ch09/handlers  0.019s
ok      github.com/awoodbeck/gnp/ch09/middleware        1.038s
?       github.com/awoodbeck/gnp/ch10   [no test files]
?       github.com/awoodbeck/gnp/ch10/backend   [no test files]
?       github.com/awoodbeck/gnp/ch11/cert      [no test files]
?       github.com/awoodbeck/gnp/ch12/client    [no test files]
?       github.com/awoodbeck/gnp/ch12/cmd       [no test files]
?       github.com/awoodbeck/gnp/ch12/gob       [no test files]
?       github.com/awoodbeck/gnp/ch12/housework [no test files]
?       github.com/awoodbeck/gnp/ch12/housework/v1      [no test files]
?       github.com/awoodbeck/gnp/ch12/json      [no test files]
?       github.com/awoodbeck/gnp/ch12/protobuf  [no test files]
?       github.com/awoodbeck/gnp/ch12/server    [no test files]
?       github.com/awoodbeck/gnp/ch13/instrumentation   [no test files]
?       github.com/awoodbeck/gnp/ch13/instrumentation/metrics   [no test files]
?       github.com/awoodbeck/gnp/ch14/aws       [no test files]
?       github.com/awoodbeck/gnp/ch14/azure     [no test files]
?       github.com/awoodbeck/gnp/ch14/gcp       [no test files]
ok      github.com/awoodbeck/gnp/ch11   2.305s
ok      github.com/awoodbeck/gnp/ch13   1.076s

What's gnp in the context of this repository?

gnp was the acronym for the book's working name, "Go Network Programming." The book's name evolved while in development, but the repository did not. Before publishing, my energy was entirely focused on completing the book, and I couldn't justify renaming this repository and correcting all references to it while the book's deadline loomed. Perhaps in the second edition.