aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristine Dodrill <me@christine.website>2019-10-28 19:53:52 -0400
committerGitHub <noreply@github.com>2019-10-28 19:53:52 -0400
commit42371916d83af7fc2e4ca053d963e6cfab15a8f1 (patch)
tree3350926d4aaa668c3a8e384c88daa39ab0f5a6dc
parent67843baf71dc86c2233ddf25234cdd66d844faed (diff)
downloadxesite-42371916d83af7fc2e4ca053d963e6cfab15a8f1.tar.xz
xesite-42371916d83af7fc2e4ca053d963e6cfab15a8f1.zip
blog/get-going-hello-world: second draft (#90)
* blog/get-going-hello-world: second draft Thanks @faithanalog for feedback * Update get-going-hello-world-2019-10-28.markdown * Update get-going-hello-world-2019-10-28.markdown
-rw-r--r--blog/get-going-hello-world-2019-10-28.markdown228
1 files changed, 228 insertions, 0 deletions
diff --git a/blog/get-going-hello-world-2019-10-28.markdown b/blog/get-going-hello-world-2019-10-28.markdown
new file mode 100644
index 0000000..a969946
--- /dev/null
+++ b/blog/get-going-hello-world-2019-10-28.markdown
@@ -0,0 +1,228 @@
+---
+title: "Get Going: Hello, World!"
+date: 2019-10-28
+series: get-going
+tags:
+ - golang
+ - book
+ - draft
+---
+
+# Get Going: Hello, World!
+
+This post is a draft of the first chapter in a book I'm writing to help people learn the
+[Go][go] programming language. It's aimed at people who understand the high
+level concepts of programming, but haven't had much practical experience with
+it. This is a sort of spiritual successor to my old
+[Getting Started with Go][gswg] post from 2015. A lot has changed in the
+ecosystem since then, as well as my understanding of the language.
+
+[go]: https://golang.org
+[gswg]: https://christine.website/blog/getting-started-with-go-2015-01-28
+
+Like always, feedback is very welcome. Any feedback I get will be used to help
+make this book even better.
+
+This article is a bit of an expanded version of what the first chapter will
+eventually be. I also plan to turn a version of this article into a workshop for
+my dayjob.
+
+## What is Go?
+
+Go is a compiled programming language made by Google. It has a lot of features
+out of the box, including:
+
+* A static type system
+* Fast compile times
+* Efficient code generation
+* Parallel programming for free*
+* A strong standard library
+* Cross-compilation with ease (including webassembly)
+* and more!
+
+\* You still have to write code that can avoid race conditions, more on those
+later.
+
+### Why Use Go?
+
+Go is a very easy to read and write programming language. Consider this snippet:
+
+```go
+func Add(x int, y int) int {
+ return x + y
+}
+```
+
+This function wraps [integer
+addition](https://golang.org/ref/spec#Arithmetic_operators). When you call it it
+returns the sum of x and y.
+
+## Installing Go
+
+### Linux
+
+Installing Go on Linux systems is a very distribution-specific thing. Please see
+[this tutorial on
+DigitalOcean](https://www.digitalocean.com/community/tutorials/how-to-install-go-on-ubuntu-18-04)
+for more information.
+
+### macOS
+
+* Go to https://golang.org/dl
+* Download the .pkg file
+* Double-click on it and go through the installer process
+
+### Windows
+
+* Go to https://golang.org/dl
+* Download the .msi file
+* Double-click on it and go through the installer process
+
+### Next Steps
+
+These next steps are needed to set up your shell for Go programs.
+
+Pick a directory you want to store Go programs and downloaded source code in.
+This is called your GOPATH. This is usually the `go` folder in
+your home directory. If for some reason you want another folder for this, use
+that folder instead of `$HOME/go` below.
+
+#### Linux/macOS
+
+This next step is unfortunately shell-specific. To find out what shell you are
+using, run the following command in your terminal:
+
+```console
+$ env | grep SHELL
+```
+
+The name at the path will be the shell you are using.
+
+##### bash
+
+If you are using bash, add the following lines to your .bashrc (Linux) or
+.bash_profile (macOS):
+
+```
+export GOPATH=$HOME/go
+export PATH="$PATH:$GOPATH/bin"
+```
+
+Then reload the configuration by closing and re-opening your terminal.
+
+##### fish
+
+If you are using fish, create a file in ~/.config/fish/conf.d/go.fish with the
+following lines:
+
+```
+set -gx GOPATH $HOME/go
+set -gx PATH $PATH "$GOPATH/bin"
+```
+
+##### zsh
+
+If you are using zsh, add the following lines to your .zshrc:
+
+```
+export GOPATH=$HOME/go
+export PATH="$PATH:$GOPATH/bin"
+```
+
+#### Windows
+
+Follow the instructions
+[here](https://github.com/golang/go/wiki/SettingGOPATH#windows).
+
+## Installing a Text Editor
+
+For this book, we will be using VS Code. Download and install it
+from https://code.visualstudio.com. The default settings will let you work with
+Go code.
+
+## Hello, world!
+
+Now that everything is installed, let's test it with the classic "Hello, world!"
+program. Create a folder in your home folder `Code`. Create another folder
+inside that Code folder called `get_going` and create yet another subfolder
+called `hello`. Open a file in there with VS Code (Open Folder -> Code ->
+get_going -> hello) called `hello.go` and type in the following:
+
+```go
+// Command hello is your first Go program.
+package main
+
+import "fmt"
+
+func main() {
+ fmt.Println("Hello, world!")
+}
+```
+
+This program prints "Hello, world!" and then immediately exits. Here's each of
+the parts in detail:
+
+```go
+// Command hello is your first go program.
+package main // Every go file must be in a package.
+ // Package main is used for creating executable files.
+
+import "fmt" // Go doesn't implicitly import anything. You need to
+ // explicitly import "fmt" for printing text to
+ // standard output.
+
+func main() { // func main is the entrypoint of the program, or
+ // where the computer starts executing your code
+ fmt.Println("Hello, world!") // This prints "Hello, world!" followed by a newline
+ // to standard output.
+} // This ends the main function
+```
+
+Now click over to the terminal at the bottom of the VS Code window and run this
+program with the following command:
+
+```console
+$ go run hello.go
+Hello, world!
+```
+
+`go run` compiles and runs the code for you, without creating a persistent binary
+file. This is a good way to run programs while you are writing them.
+
+To create a binary, use `go build`:
+
+```console
+$ go build hello.go
+$ ./hello
+Hello, world!
+```
+
+`go build` has the compiler create a persistent binary file and puts it in the
+same directory as you are running `go` from. Go will choose the filename of the
+binary based on the name of the .go file passed to it. These binaries are
+usually static binaries, or binaries that are safe to distribute to other
+computers without having to worry about linked libraries.
+
+## Exercises
+
+The following is a list of optional exercises that may help you understand more:
+
+1. Replace the "world" in "Hello, world!" with your name.
+2. Rename `hello.go` to `main.go`. Does everything still work?
+3. Read through the documentation of the [fmt][fmt] package.
+
+[fmt]: https://golang.org/pkg/fmt
+
+---
+
+And that about wraps it up for Lesson 1 in Go. Like I mentioned before, feedback
+on this helps a lot.
+
+Up next is an overview on data types such as integers, true/false booleans,
+floating-point numbers and strings.
+
+I plan to post the book source code on my GitHub page once I have more than one
+chapter drafted.
+
+
+Thanks and be well.