如果i是變數,通過&i
語法來取得i
的記憶體位址
如果i是指標,通過*i
語法來取得i
的值
這篇教程不錯package main
import
"fmt"
// 乙個函式,接收的是資料型別
// 乙個函式,接收的是資料型別的指標
// 接收到引數後,將引數值重新賦值,在從外面呼叫
// 發現普通的不會改變值,因為在不同的作用域內
// 而傳遞指標的,會改變值,因為操作的是記憶體位址
func
zeroval
(ival int
)func
zeroptr
(iptr *
int)
func
main()
可以把結構體想象成乙個類,這個方法區別於函式,屬於類的函式 叫方法。package main
import
"fmt"
// 這裡的 `person` 結構體包含了 `name` 和 `age` 兩個字段。
type person struct
func
main()
)// 你可以在初始化乙個結構體元素時指定欄位名字。
fmt.
println
(person
)// 省略的字段將被初始化為零值。
fmt.
println
(person
)// `&` 字首生成乙個結構體指標。
fmt.
println
(&person
)// 使用點來訪問結構體欄位。
s := person
fmt.
println
(s.name)
// 也可以對結構體指標使用`.` - 指標會被自動解引用。
sp :=
&s fmt.
println
(sp.age)
// 結構體是可變的。
sp.age =
51 fmt.
println
(sp.age)
}
package main
import
"fmt"
// 定義結構體
type rect struct
// 定義結構體的方法 面積
// 方法名叫area,返回值為int
// 這個接收的是乙個指標
func
(r *rect)
area()
int// 這個接收的是值,會有資料拷貝,其方法內的操作不會影響外面
func
(r rect)
perim()
intfunc
main()
fmt.
println
("area: "
, r.
area()
) fmt.
println
("perim:"
, r.
perim()
) rp :=
&r fmt.
println
("area: "
, rp.
area()
) fmt.
println
("perim:"
, rp.
perim()
)}
值型別的變數和指標型別的變數 區別area: 50
perim: 30
area: 50
perim: 30
package main
import
"fmt"
import
"math"
// 這裡是乙個幾何體的基本介面。
// 把幾何體的方法都羅列出來
type geometry inte***ce
// 矩形 結構體
type square struct
// 圓形 結構體
type circle struct
// 定義矩形結構體的方法
func
(s square)
area()
float64
func
(s square)
perim()
float64
// 定義圓形結構體的方法
func
(c circle)
area()
float64
func
(c circle)
perim()
float64
// 將介面當做引數,傳入到measure函式中,型別是geometry,形參是g
// 我們實際傳入的是結構體的例項
// 介面定義了一些方法名,這個例項也實現了對應的方法名
// 在函式中,就可以直接呼叫了
func
measure
(g geometry)
func
main()
c := circle
// 執行函式
measure
(s)measure
(c)}
go學習筆記 2指標
go 語言中指標是很容易學習的,go 語言中使用指標可以更簡單的執行一些任務。接下來讓我們來一步步學習 go 語言指標。我們都知道,變數是一種使用方便的佔位符,用於引用計算機記憶體位址。go 語言的取位址符是 放到乙個變數前使用就會返回相應變數的記憶體位址。執行以上 輸出結果為 現在我們已經了解了什...
Go語言學習筆記九 指標
指標的概念是當時學c語言時了解的。go語言的指標感覺與c語言的沒啥不同。指標變數是儲存記憶體位址的變數。其他變數儲存的是數值,而指標變數儲存的是記憶體位址。這個記憶體位址可能儲存者乙個基本數值。指標變數也是有型別的。它需要知道自己儲存的記憶體位址指向數值的型別,因為不同的數值型別占用的空間大小是不同...
Go 結構體,結構體指標和方法
結構體 講乙個或多個變數組合到一起形成新的型別,這個型別就是結構體,結構體是值型別 定義結構體和賦值 learn go main.go package main import fmt type people struct func main fmt.printf p peo 0x110040f0 賦...