• Stars
    star
    169
  • Rank 224,453 (Top 5 %)
  • Language
    Go
  • License
    MIT License
  • Created over 5 years ago
  • Updated 11 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The code repository for No Starch Press' Network Programming with Go

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.