2019-10-30 19:41:13 +03:00

98 lines
2.9 KiB
Go

// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// For more tutorials : https://learngoprogramming.com
// In-person training : https://www.linkedin.com/in/inancgumus/
// Follow me on twitter: https://twitter.com/inancgumus
package main
import "fmt"
type computer struct {
brand string
}
func main() {
// create a nil pointer with the type of pointer to a computer
var null *computer
// compare the pointer variable to a nil value
if null == nil {
// , and say it's nil
fmt.Println("null computer is nil")
}
// create an apple computer by putting its address to a pointer variable
apple := &computer{brand: "apple"}
// put the apple into a new pointer variable
newApple := apple
// compare the apples: if they are equal
if apple == newApple {
// say so and print their addresses
fmt.Printf("apples are equal : apple: %p newApple: %p\n",
apple, newApple)
}
// create a sony computer by putting its address to a new pointer variable
sony := &computer{brand: "sony"}
// compare apple to sony, if they are not equal
if apple != sony {
// say so and print their addresses
fmt.Printf("apple and sony are inequal: apple: %p sony: %p\n",
apple, sony)
}
// put apple's value into a new ordinary variable
appleVal := *apple
// print apple pointer variable's address, and the address it points to
// and, print the new variable's addresses as well
fmt.Printf("apple : %p %p\n", &apple, apple)
fmt.Printf("appleVal : %p\n", &appleVal)
// compare the value that is pointed by the apple and the new variable
if *apple == appleVal {
// if they are equal say so
fmt.Println("apple and appleVal are equal")
// print the values:
// the value that is pointed by the apple and the new variable
fmt.Printf("apple : %+v — appleVal: %+v\n",
*apple, appleVal)
}
// change sony's brand to hp using the func
change(sony, "hp")
// print sony's brand
fmt.Printf("sony : %s\n", sony.brand)
// print the returned value
fmt.Printf("appleVal : %+v\n", valueOf(apple))
// and call the func 3 times and print the returned values' addresses
fmt.Printf("dell's address : %p\n", newComputer("dell"))
fmt.Printf("lenovo's address : %p\n", newComputer("lenovo"))
fmt.Printf("acer's address : %p\n", newComputer("acer"))
}
// create a new function: change
// the func can change the given computer's brand to another brand
func change(c *computer, brand string) {
c.brand = brand
}
// write a func that returns the value that is pointed by the given *computer
func valueOf(c *computer) computer {
return *c
}
// write a new constructor func that returns a pointer to a computer
func newComputer(brand string) *computer {
return &computer{brand: brand}
}