指針
一個指針變量指向了一個值的內存地址
聲明指針 var ip *int
package main
import "fmt"
func main() {
var a int= 20 /* 聲明實際變量 */
var ip *int /* 聲明指針變量 */
ip = &a /* 指針變量的存儲地址 */
fmt.Printf("a 變量的地址是: %x\n", &a )
i, j := 42, 2701
p := &i // 指向 i
fmt.Println(*p) // 通過指針讀取 i 的值
*p = 21 // 通過指針設置 i 的值
fmt.Println(i) // 查看 i 的值
p = &j // 指向 j
*p = *p / 37 // 通過指針對 j 進行除法運算
fmt.Println(j) // 查看 j 的值
}
結構體
一組字段(field)
package main
import "fmt"
type Vertex struct {
X, Y int
}
var (
v1 = Vertex{1, 2} // 創建一個 Vertex 類型的結構體
v2 = Vertex{X: 1} // Y:0 被隱式地賦予
v3 = Vertex{} // X:0 Y:0
p = &Vertex{1, 2} // 創建一個 *Vertex 類型的結構體(指針)
)
func main() {
fmt.Println(v1, p, v2, v3)
}
數組
相同唯一類型的一組已編號且長度固定的數據項序列
數組的長度是其類型的一部分,因此數組不能改變大小。
package main
import "fmt"
func main() {
var a [2]string
a[0] = "Hello"
a[1] = "World"
fmt.Println(a[0], a[1])
fmt.Println(a)
primes := [6]int{2, 3, 5, 7, 11, 13}
fmt.Println(primes)
}
切片
每個數組的大小都是固定的。而切片則爲數組元素提供動態大小的、靈活的視角。在實踐中,切片比數組更常用。
range
map
可變變量
func f1(a ...interface{}) {
fmt.Printf("類型:%T 值:%v\n", a, a)
}
func main() {
s := []interface{}{1, 3, 5, 7, 8}
f1(s)
f1(s...)
}
結果:
類型:[]interface {} 值:[[1 3 5 7 8]]
類型:[]interface {} 值:[1 3 5 7 8]
好的學習地址