mirror of
https://github.com/bootdotdev/fcc-learn-golang-assets.git
synced 2025-12-10 07:11:19 +00:00
46 lines
1.2 KiB
Markdown
46 lines
1.2 KiB
Markdown
# Pointers
|
|
|
|
Pointers hold the memory address of a value.
|
|
|
|
The `*` syntax defines a pointer:
|
|
|
|
```go
|
|
var p *int
|
|
```
|
|
|
|
A pointer's zero value is `nil`
|
|
|
|
The & operator generates a pointer to its operand.
|
|
|
|
```go
|
|
myString := "hello"
|
|
myStringPtr = &myString
|
|
```
|
|
|
|
The * dereferences a pointer to gain access to the value
|
|
|
|
```go
|
|
fmt.Println(*myStringPtr) // read myString through the pointer
|
|
*myStringPtr = "world" // set myString through the pointer
|
|
```
|
|
|
|
Unlike C, Go has no [pointer arithmetic](https://www.tutorialspoint.com/cprogramming/c_pointer_arithmetic.htm)
|
|
|
|
## Just because you can doesn't mean you should
|
|
|
|
We're doing this exercise to understand that pointers **can** be used in this way. That said, pointers can be *very* dangerous. It's generally a better idea to have your functions accept non-pointers and return new values rather than mutating pointer inputs.
|
|
|
|
## Assignment
|
|
|
|
Complete the `removeProfanity` function.
|
|
|
|
It should use the [strings.ReplaceAll](https://pkg.go.dev/strings#ReplaceAll) function to replace all instances of the following words in the input `message` with asterisks.
|
|
|
|
* "dang" -> "****"
|
|
* "shoot" -> "*****"
|
|
* "heck" -> "****"
|
|
|
|
It should *mutate* the value in the pointer and return nothing.
|
|
|
|
Do *not* alter the function signature.
|