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

johnp
Hi Brian, Looks like the api for tinydb has changed a little. Noticed while working on chapter 7 that the .purge() call to the db throws...
New
GilWright
Working through the steps (checking that the Info,plist matches exactly), run the demo game and what appears is grey but does not fill th...
New
Alexandr
Hi everyone! There is an error on the page 71 in the book “Programming machine learning from coding to depp learning” P. Perrotta. You c...
New
jdufour
Hello! On page xix of the preface, it says there is a community forum "… for help if your’re stuck on one of the exercises in this book… ...
New
Mmm
Hi, build fails on: bracket-lib = “~0.8.1” when running on Mac Mini M1 Rust version 1.5.0: Compiling winit v0.22.2 error[E0308]: mi...
New
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
jonmac
The allprojects block listed on page 245 produces the following error when syncing gradle: “org.gradle.api.GradleScriptException: A prob...
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
New

Other popular topics Top

AstonJ
A thread that every forum needs! Simply post a link to a track on YouTube (or SoundCloud or Vimeo amongst others!) on a separate line an...
New
dasdom
No chair. I have a standing desk. This post was split into a dedicated thread from our thread about chairs :slight_smile:
New
New
AstonJ
We have a thread about the keyboards we have, but what about nice keyboards we come across that we want? If you have seen any that look n...
New
AstonJ
There’s a whole world of custom keycaps out there that I didn’t know existed! Check out all of our Keycaps threads here: https://forum....
New
Exadra37
I am asking for any distro that only has the bare-bones to be able to get a shell in the server and then just install the packages as we ...
New
Exadra37
Oh just spent so much time on this to discover now that RancherOS is in end of life but Rancher is refusing to mark the Github repo as su...
New
PragmaticBookshelf
Author Spotlight Mike Riley @mriley This month, we turn the spotlight on Mike Riley, author of Portable Python Projects. Mike’s book ...
New
husaindevelop
Inside our android webview app, we are trying to paste the copied content from another app eg (notes) using navigator.clipboard.readtext ...
New
DevotionGeo
I have always used antique keyboards like Cherry MX 1800 or Cherry MX 8100 and almost always have modified the switches in some way, like...
New

Sub Categories: