raul

raul

Distributed Services with Go: Chapter 1 Suggestions

Hi Travis! Thank you for the cool book! :slight_smile:

I made a list of issues and thought I could post them chapter by chapter. I’m reviewing distributed-services-with-go_B4.0.pdf. Please let me know if you’d prefer me to post them issue by issue instead. That’s going to take longer…

Chapter 1. Let’s Go

Page footer includes links to:
+ report erratum: http://pragprog.com/titles/tjgo/errata/add
+ discuss: http://forums.pragprog.com/forums/tjgo
+ Are both of these outdated?

So you can build a simple commit log with a slice.

  • (Before reading up on Go) What’s a slice?
  • For a Go newbie, maybe it’s better to call it ‘Go slice’? But I guess the book title does say ‘with Go’ :slight_smile:

Set Up the Project
$ mkdir proglog
$ cd proglog
$ go mod init github.com/travisjeffery/proglog

  • This creates a go.mod in the top-level proglog folder
  • But when I checkout the github project to compare, the go.mod file is in proglog/LetsGo. Thought I’d mention in case things aren’t as intended.

Create a internal/server directory tree in the root of your project and put the following code under the server directory in a file called log.go:

  • Create a → Create ‘an’
  • LetsGo in the code path is not introduced anywhere?
  • Does it need to be there, or should it be ‘proglog’ instead?
  • Personally, I think Chapter_1/ would make it clearer if that were the intention.

LetsGo/internal/server/log.go

  • Trying to copy the code from the pdf didn’t work - all kinds of extra formatting was turning up on the Mac? Is there some option I need to be enabling? I finally copied in one line at a time because even copying one method at a time ran into issues.
  • Clicking on the link takes to the code in the browser! Hadn’t known that, maybe you could mention it in the text? That was a life saver in terms of helping with copying in code!
  1. Unmarshal the request’s JSON body into a struct.
  • (Before reading up on Go) Does struct mean a record here? What’s a struct?
  • For a Go newbie, maybe it’s better to call it ‘Go struct’?

so the user just needs to call ListenAndServe() to

  • What’s ListenAndServe()? Sorry didn’t understand this

$ go run main.go

func main() {

curl -X POST localhost:8080 -d
‘{“record”: {“value”: “TGV0J3MgR28gIzEK”}}’

  • That worked!
  • Would it be a good idea to include the output as well, so that people can cross-check whether things look good?
  • {“offset”:0}

curl -X GET localhost:8080 -d ‘{“offset”: 0}’

  • Would it be a good idea to include the output folks should expect?
  • {“record”:{“value”:“TGV0J3MgR28gIzEK”,“offset”:0}}

Would it be a good idea to include a section on setting up GoLand that would help with debugging later on, even in a later chapter?

  • It took me a while to figure out what to point GOROOT at, with goenv. I finally pointed it at the go version in ~/.goenv/versions/ that my go was coming from and am not sure whether that’s the way to go but it seems to work for now.

Most Liked

rsippl

rsippl

The mutex makes sure you don’t read from the log while writing to it. You could have n concurrent readers without needing a mutex, if only you were sure no one is writing to it. Actually, this is a scenario for sync.RWMutex. Its docs explain it well: “The lock can be held by an arbitrary number of readers or a single writer”.

Where Next?

Popular Pragmatic Bookshelf topics Top

abtin
page 20: … protoc command… I had to additionally run the following go get commands in order to be able to compile protobuf code using go...
New
jesse050717
Title: Web Development with Clojure, Third Edition, pg 116 Hi - I just started chapter 5 and I am stuck on page 116 while trying to star...
New
rmurray10127
Title: Intuitive Python: docker run… denied error (page 2) Attempted to run the docker command in both CLI and Powershell PS C:\Users\r...
New
AndyDavis3416
@noelrappin Running the webpack dev server, I receive the following warning: ERROR in tsconfig.json TS18003: No inputs were found in c...
New
nicoatridge
Hi, I have just acquired Michael Fazio’s “Kotlin and Android Development” to learn about game programming for Android. I have a game in p...
New
brunogirin
When I run the coverage example to report on missing lines, I get: pytest --cov=cards --report=term-missing ch7 ERROR: usage: pytest [op...
New
dsmith42
Hey there, I’m enjoying this book and have learned a few things alredayd. However, in Chapter 4 I believe we are meant to see the “>...
New
kolossal
Hi, I need some help, I’m new to rust and was learning through your book. but I got stuck at the last stage of distribution. Whenever I t...
New
andreheijstek
After running /bin/setup, the first error was: The foreman' command exists in these Ruby versions: That was easy to fix: gem install fore...
New
SlowburnAZ
Getting an error when installing the dependencies at the start of this chapter: could not compile dependency :exla, "mix compile" failed...
New

Other popular topics Top

axelson
I’ve been really enjoying obsidian.md: It is very snappy (even though it is based on Electron). I love that it is all local by defaul...
New
siddhant3030
I’m thinking of buying a monitor that I can rotate to use as a vertical monitor? Also, I want to know if someone is using it for program...
New
DevotionGeo
I know that -t flag is used along with -i flag for getting an interactive shell. But I cannot digest what the man page for docker run com...
New
AstonJ
Do the test and post your score :nerd_face: :keyboard: If possible, please add info such as the keyboard you’re using, the layout (Qw...
New
mafinar
This is going to be a long an frequently posted thread. While talking to a friend of mine who has taken data structure and algorithm cou...
New
PragmaticBookshelf
Build efficient applications that exploit the unique benefits of a pure functional language, learning from an engineer who uses Haskell t...
New
Help
I am trying to crate a game for the Nintendo switch, I wanted to use Java as I am comfortable with that programming language. Can you use...
New
PragmaticBookshelf
Author Spotlight Rebecca Skinner @RebeccaSkinner Welcome to our latest author spotlight, where we sit down with Rebecca Skinner, auth...
New
PragmaticBookshelf
Author Spotlight: Sophie DeBenedetto @SophieDeBenedetto The days of the traditional request-response web application are long gone, b...
New
New

Sub Categories: