update golang

This commit is contained in:
ErdemOzgen 2024-10-09 20:35:35 +03:00
parent ba6437844c
commit b074f149fe
3 changed files with 383 additions and 0 deletions

View File

@ -0,0 +1,383 @@
********************************************************************************
Golang - Asterisk and Ampersand Cheatsheet
********************************************************************************
Also available at: https://play.golang.org/p/lNpnS9j1ma
Allowed:
--------
```go
/*
********************************************************************************
Golang - Asterisk and Ampersand Cheatsheet
********************************************************************************
Allowed:
--------
p := Person{"Hillary", 28}  stores the value
p := &Person{"Hillary", 28}     stores the pointer address (reference)
PrintPerson(p)          passes either the value or pointer address (reference)
PrintPerson(*p)         passes the value
PrintPerson(&p)         passes the pointer address (reference)
func PrintPerson(p Person)  ONLY receives the value
func PrintPerson(p *Person) ONLY receives the pointer address (reference)
Not Allowed:
--------
p := *Person{"Hillary", 28}     illegal
func PrintPerson(p &Person) illegal
*/
package main
import (
    "fmt"
)
type Erdem struct {
    CodingSkillPercent int
    Occupation         string
}
type Person struct {
    Name string
    Age  int
}
// This only works with *Person, does not work with Person
// Only works with Test 2 and Test 3
func (p *Person) String() string {
    return fmt.Sprintf("%s is %d", p.Name, p.Age)
}
// This works with both *Person and Person, BUT you can't modiy the value and
// it takes up more space
// Works with Test 1, Test 2, Test 3, and Test 4
/*func (p Person) String() string {
    return fmt.Sprintf("%s is %d", p.Name, p.Age)
}*/
// *****************************************************************************
// Test 1 - Pass by Value
// *****************************************************************************
func test1() {
    fmt.Println("Test 1")
    p := Person{"Hillary", 28}
    printPerson1(p)
    updatePerson1(p)
    printPerson1(p)
    fmt.Println("Test 1 ENDS")
}
func updatePerson1(p Person) {
    p.Age = 32
    printPerson1(p)
}
func printPerson1(p Person) {
    fmt.Printf("String: %v | Name: %v | Age: %d\n",
        p,
        p.Name,
        p.Age)
}
// *****************************************************************************
// Test 2 - Pass by Reference
// *****************************************************************************
func test2() {
    fmt.Println("Test 2")
    p := &Person{"Hillary", 28}
    printPerson2(p)
    updatePerson2(p)
    printPerson2(p)
    fmt.Println("Test 2 ENDS")
}
func updatePerson2(p *Person) {
    p.Age = 32
    printPerson2(p)
}
func printPerson2(p *Person) {
    fmt.Printf("String: %v | Name: %v | Age: %d\n",
        p,
        p.Name,
        p.Age)
}
// *****************************************************************************
// Test 3 - Pass by Reference (requires more typing)
// *****************************************************************************
func test3() {
    fmt.Println("Test 3")
    p := Person{"Hillary", 28}
    printPerson3(&p)
    updatePerson3(&p)
    printPerson3(&p)
    fmt.Println("Test 3 ENDS")
}
func updatePerson3(p *Person) {
    p.Age = 32
    printPerson3(p)
}
func printPerson3(p *Person) {
    fmt.Printf("String: %v | Name: %v | Age: %d\n",
        p,
        p.Name,
        p.Age)
}
// *****************************************************************************
// Test 4 - Pass by Value (requires more typing)
// *****************************************************************************
func test4() {
    p := &Person{"Hillary", 28}
    printPerson4(*p)
    updatePerson4(*p)
    printPerson4(*p)
}
func updatePerson4(p Person) {
    p.Age = 32
    printPerson4(p)
}
func printPerson4(p Person) {
    fmt.Printf("String: %v | Name: %v | Age: %d\n",
        p,
        p.Name,
        p.Age)
}
// *****************************************************************************
// Main
// *****************************************************************************
/*
Outputs:
String: {Hillary 28} | Name: Hillary | Age: 28
String: {Hillary 32} | Name: Hillary | Age: 32
String: {Hillary 28} | Name: Hillary | Age: 28
String: Hillary is 28 | Name: Hillary | Age: 28
String: Hillary is 32 | Name: Hillary | Age: 32
String: Hillary is 32 | Name: Hillary | Age: 32
String: Hillary is 28 | Name: Hillary | Age: 28
String: Hillary is 32 | Name: Hillary | Age: 32
String: Hillary is 32 | Name: Hillary | Age: 32
String: {Hillary 28} | Name: Hillary | Age: 28
String: {Hillary 32} | Name: Hillary | Age: 32
String: {Hillary 28} | Name: Hillary | Age: 28
*/
func main() {
    test1()
    test2()
    test3()
    test4()
}
// *****************************************************************************
// Main
// *****************************************************************************
/*
Outputs:
String: {Steve 28} | Name: Steve | Age: 28
String: {Steve 32} | Name: Steve | Age: 32
String: {Steve 28} | Name: Steve | Age: 28
String: Steve is 28 | Name: Steve | Age: 28
String: Steve is 32 | Name: Steve | Age: 32
String: Steve is 32 | Name: Steve | Age: 32
String: Steve is 28 | Name: Steve | Age: 28
String: Steve is 32 | Name: Steve | Age: 32
String: Steve is 32 | Name: Steve | Age: 32
String: {Steve 28} | Name: Steve | Age: 28
String: {Steve 32} | Name: Steve | Age: 32
String: {Steve 28} | Name: Steve | Age: 28
*/
func main() {
test1()
test2()
test3()
test4()
}
```