Auto-tag any posts inside May 2024 as WeblogPoMo2024. Add Day 3 post.
Some checks failed
Build and copy to prod / build-and-copy (push) Has been cancelled
Some checks failed
Build and copy to prod / build-and-copy (push) Has been cancelled
This commit is contained in:
parent
bdaf43ad16
commit
18f3421299
3
src/blog/posts/2024/5/5.11tydata.json
Normal file
3
src/blog/posts/2024/5/5.11tydata.json
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"tags": ["WeblogPoMo2024"]
|
||||||
|
}
|
@ -2,10 +2,8 @@
|
|||||||
title: "Learning Go: Day One"
|
title: "Learning Go: Day One"
|
||||||
date: 2024-05-01T08:00:00.0Z
|
date: 2024-05-01T08:00:00.0Z
|
||||||
tags:
|
tags:
|
||||||
- tech
|
|
||||||
- learning
|
- learning
|
||||||
- go
|
- go
|
||||||
- WeblogPoMo2024
|
|
||||||
excerpt: "I've wanted to try learning Go for a while now, but have never got round to it. So I'm going to (attempt) to learn a little bit about it each day, and blog about it, with a view to building something with it by the end of the month."
|
excerpt: "I've wanted to try learning Go for a while now, but have never got round to it. So I'm going to (attempt) to learn a little bit about it each day, and blog about it, with a view to building something with it by the end of the month."
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -2,10 +2,8 @@
|
|||||||
title: "Learning Go: Day Two"
|
title: "Learning Go: Day Two"
|
||||||
date: 2024-05-02T08:00:00.0Z
|
date: 2024-05-02T08:00:00.0Z
|
||||||
tags:
|
tags:
|
||||||
- tech
|
|
||||||
- learning
|
- learning
|
||||||
- go
|
- go
|
||||||
- WeblogPoMo2024
|
|
||||||
excerpt: "In part two, I take a look at how to organise code into packages"
|
excerpt: "In part two, I take a look at how to organise code into packages"
|
||||||
---
|
---
|
||||||
|
|
||||||
|
119
src/blog/posts/2024/5/learning-go-day-3.md
Normal file
119
src/blog/posts/2024/5/learning-go-day-3.md
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
---
|
||||||
|
title: "Learning Go: Day Three"
|
||||||
|
date: 2024-05-03T08:00:00.0Z
|
||||||
|
tags:
|
||||||
|
- learning
|
||||||
|
- go
|
||||||
|
excerpt: "For my third day of learning Go, I'm going to take a look at some control structures"
|
||||||
|
---
|
||||||
|
|
||||||
|
Over the last two days I've learned how to [setup and create a Go project](/post/learning-go-day-1/), and then [how to organise code into packages](/post/learning-go-day-2). I realise I've skipped a crucial step there, though, which is learning how to deal with control structures.
|
||||||
|
|
||||||
|
By control structures, I'm referring to things like `for-` loops, `if` statements, etc. You know, the things that make the software do things beyond just multiplying 2 by 5.
|
||||||
|
|
||||||
|
## For-loops
|
||||||
|
|
||||||
|
The old trusty workhorse of any programming language. These seem pretty straightforward in Go, similar to most other languages:
|
||||||
|
|
||||||
|
```go
|
||||||
|
// maths.go
|
||||||
|
|
||||||
|
// Calculate val to the n'th power
|
||||||
|
func Pow(val, n int) int {
|
||||||
|
for i:= 1; i < n; i++ {
|
||||||
|
val *= val
|
||||||
|
}
|
||||||
|
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
|
||||||
|
// main.go
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
four_squared := maths.Pow(4, 2)
|
||||||
|
fmt.Printf("4^2 = %d\n", four_squared)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Cool, this worked. I have successfully reinvented a small wheel[^1].
|
||||||
|
|
||||||
|
## Do-While
|
||||||
|
|
||||||
|
The _other_ trusty workhorse! Most languages have some form of this construct that says something like:
|
||||||
|
|
||||||
|
```
|
||||||
|
while statement is true:
|
||||||
|
do something
|
||||||
|
```
|
||||||
|
|
||||||
|
But not Go, apparently! Or at least, not explicitly. In for-loops, the first and last arguments - defining a variable and performing an operation on it - are totally optional, so a while loop is just a for-loop[^2]:
|
||||||
|
|
||||||
|
```go
|
||||||
|
// maths.go
|
||||||
|
|
||||||
|
func Mod(a, b int) int {
|
||||||
|
remainder := a
|
||||||
|
for remainder >= b {
|
||||||
|
remainder -= b
|
||||||
|
}
|
||||||
|
return remainder
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## If-else-then
|
||||||
|
|
||||||
|
The third trusty workhorseman of the Gopocalypse[^3]. Basic if-statements are pretty straightforward:
|
||||||
|
|
||||||
|
```go
|
||||||
|
// maths.go
|
||||||
|
|
||||||
|
func Divide(a, b int) int {
|
||||||
|
if a == 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
if b == 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
return a / b
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Which could be cleaned up to use else-if:
|
||||||
|
|
||||||
|
```go
|
||||||
|
// maths.go
|
||||||
|
|
||||||
|
func Divide(a, b int) int {
|
||||||
|
if a == 0 {
|
||||||
|
return 0
|
||||||
|
} else if b == 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also add variable declarations to if-statements, which are then only accessible inside the blocks:
|
||||||
|
|
||||||
|
```go
|
||||||
|
// maths.go
|
||||||
|
|
||||||
|
func Min(a, b int) int {
|
||||||
|
if v := a - b; v > 0 {
|
||||||
|
return b
|
||||||
|
} else {
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Okay, so that's covered most of the control structures off the top of my head. On my to-do list for the next couple of days are: working with arrays, and testing.
|
||||||
|
|
||||||
|
[^1]: This particular wheel is a lot slower than the original wheel, but hey, I'm learning
|
||||||
|
[^2]: Yes, yes, I know that's actually the case in many languages and `while` is just syntactic sugar
|
||||||
|
[^3]: I'm sorry.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user