mirror of
https://github.com/jbranchaud/til
synced 2026-01-16 05:28:03 +00:00
Compare commits
4 Commits
12f4f3969d
...
7212fcbf27
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7212fcbf27 | ||
|
|
a8ba753c92 | ||
|
|
5615da920f | ||
|
|
c60c63f554 |
@@ -10,7 +10,7 @@ pairing with smart people at Hashrocket.
|
||||
|
||||
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
|
||||
|
||||
_1531 TILs and counting..._
|
||||
_1532 TILs and counting..._
|
||||
|
||||
---
|
||||
|
||||
@@ -191,7 +191,7 @@ _1531 TILs and counting..._
|
||||
- [Aliasing An Ansible Host](devops/aliasing-an-ansible-host.md)
|
||||
- [Allow Cross-Origin Requests To Include Cookies](devops/allow-cross-origin-requests-to-include-cookies.md)
|
||||
- [Allow HTTPS Through Your UFW Firewall](devops/allow-https-through-your-ufw-firewall.md)
|
||||
- [Check For Cached Site Assocation File For iOS](devops/check-for-cached-site-association-file-for-ios.md)
|
||||
- [Check For Cached Site Association File For iOS](devops/check-for-cached-site-association-file-for-ios.md)
|
||||
- [Check The Status of All Services](devops/check-the-status-of-all-services.md)
|
||||
- [Check The Syntax Of nginx Files](devops/check-the-syntax-of-nginx-files.md)
|
||||
- [Connect To An RDS PostgreSQL Database](devops/connect-to-an-rds-postgresql-database.md)
|
||||
@@ -398,6 +398,7 @@ _1531 TILs and counting..._
|
||||
### Go
|
||||
|
||||
- [Access Go Docs Offline](go/access-go-docs-offline.md)
|
||||
- [Add A Method To A Struct](go/add-a-method-to-a-struct.md)
|
||||
- [Build For A Specific OS And Architecture](go/build-for-a-specific-os-and-architecture.md)
|
||||
- [Combine Two Slices](go/combine-two-slices.md)
|
||||
- [Do Something N Times](go/do-something-n-times.md)
|
||||
@@ -736,7 +737,7 @@ _1531 TILs and counting..._
|
||||
- [Check If Clusters Are Upgrade Compatible](postgres/check-if-clusters-are-upgrade-compatible.md)
|
||||
- [Check If The Local Server Is Running](postgres/check-if-the-local-server-is-running.md)
|
||||
- [Check If User Role Exists For Database](postgres/check-if-user-role-exists-for-database.md)
|
||||
- [Check Table For Any Oprhaned Records](postgres/check-table-for-any-orphaned-records.md)
|
||||
- [Check Table For Any Orphaned Records](postgres/check-table-for-any-orphaned-records.md)
|
||||
- [Checking Inequality](postgres/checking-inequality.md)
|
||||
- [Checking The Type Of A Value](postgres/checking-the-type-of-a-value.md)
|
||||
- [Clear The Screen In psql](postgres/clear-the-screen-in-psql.md)
|
||||
|
||||
70
go/add-a-method-to-a-struct.md
Normal file
70
go/add-a-method-to-a-struct.md
Normal file
@@ -0,0 +1,70 @@
|
||||
# Add A Method To A Struct
|
||||
|
||||
Given a `struct` in Go, we can attach a method to that struct. Put another way,
|
||||
we can define a method whose receiver is that struct. Then with an instance of
|
||||
that struct, we can call the method.
|
||||
|
||||
Let's say we are modeling a turtle that can move around a 2D grid. A turtle has
|
||||
a heading (the direction it is headed) and a location (its current X,Y
|
||||
coordinate).
|
||||
|
||||
```go
|
||||
type Heading string
|
||||
|
||||
const (
|
||||
UP Heading = "UP"
|
||||
RIGHT Heading = "RIGHT"
|
||||
DOWN Heading = "DOWN"
|
||||
LEFT Heading = "LEFT"
|
||||
)
|
||||
|
||||
type Turtle struct {
|
||||
Direction Heading
|
||||
X int
|
||||
Y int
|
||||
}
|
||||
```
|
||||
|
||||
We can then add a method like so by specifying the receiver as the first part
|
||||
of the declaration:
|
||||
|
||||
```go
|
||||
func (turtle *Turtle) TurnRight() {
|
||||
switch turtle.Direction {
|
||||
case UP:
|
||||
turtle.Direction = RIGHT
|
||||
case RIGHT:
|
||||
turtle.Direction = DOWN
|
||||
case DOWN:
|
||||
turtle.Direction = LEFT
|
||||
case LEFT:
|
||||
turtle.Direction = UP
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The receiver is a pointer to a `Turtle`. The method is called `TurnRight`.
|
||||
There are no parameters or return values.
|
||||
|
||||
Here are a sequence of calls to demonstrate how it works:
|
||||
|
||||
```go
|
||||
func main() {
|
||||
turtle := Turtle{UP, 5, 5}
|
||||
|
||||
fmt.Println("Turtle Direction:", turtle.Direction)
|
||||
//=> Turtle Direction: UP
|
||||
|
||||
turtle.TurnRight()
|
||||
|
||||
fmt.Println("Turtle Direction:", turtle.Direction)
|
||||
//=> Turtle Direction: RIGHT
|
||||
|
||||
turtle.TurnRight()
|
||||
|
||||
fmt.Println("Turtle Direction:", turtle.Direction)
|
||||
//=> Turtle Direction: DOWN
|
||||
}
|
||||
```
|
||||
|
||||
[source](https://go.dev/tour/methods/1)
|
||||
Reference in New Issue
Block a user