目录
前言: go语言的第三篇文章,主要讲述go语言中的数据类型,包括指针,结构体,数组,切片,映射,函数闭包等,每个都提供了示例,可直接运行。
指针保存了值的内存地址;
func testPoint() {
i := 20
p := &i
fmt.Println(*p)
*p = 1
fmt.Println(i)
}
解读:*p 的值为 20 ,i 的值为 1
使用 struct 关键字表示一个结构体。
结构体就是一个字段的集合,可以使用.来取值
示例:
/*struct*/
type user struct {
name string
age int
}
func testStruct() {
x := user{"mingyu", 23}
fmt.Println("对象", x)
fmt.Println("姓名", x.name)
x.name = "xiaona"
fmt.Println("从新设置姓名", x.name)
//通过指针访问
y := &x
fmt.Println(*y)
fmt.Println(y.age)
//指定属性赋值
z := user{age: 11}
fmt.Println("对象", z)
}
类型 [n]T 表示拥有 n 个 T 类型的值的数组。
示例:
//数组
func testArray() {
arr := [2]int{1, 2}
fmt.Println("数组", arr)
//指定下标赋值
arr[1] = 10
fmt.Println("数组", arr)
}
切片的感念是基于数组的,通过指定数组的下标,动态获取数组。
如:arr[1:3] 截取下标为1到3的数据 [下标前算后不算,中间用:分割]:
切片并不存储任何数据,它只是描述了底层数组中的一段,所以修改切片数据,数组数据也会改变。
切片 s 的长度和容量可通过表达式 len(s) 和 cap(s) 来获取,零值是 nil。
示例:
//切片
func testSection() {
arr := [5]int{1, 2, 3, 4, 5}
fmt.Println("数组", arr)
simpleArr := arr[1:3]
fmt.Println("切片", simpleArr)
simpleArr[1] = 20
fmt.Println("修改切片后的数组", arr)
}
make:
append
Range
示例:
//切片方法
func testSectionFunc() {
arr := make([]string, 0, 0)
fmt.Println(len(arr), cap(arr), arr)
arr = append(arr, "陈", "明羽")
fmt.Println(len(arr), cap(arr), arr)
for i, v := range arr {
fmt.Println(i, v)
}
fmt.Println("-----------")
for _, v := range arr {
fmt.Println(v)
}
fmt.Println("-----------")
for i := range arr {
fmt.Println(i)
}
}
将键映射到值,也就是map。
make 函数会返回给定类型的映射,并将其初始化备用。
示例:
//映射
func testMap() {
m := make(map[string]user)
m["1号"] = user{
"明羽", 23,
}
fmt.Println(m["1号"])
//还可以这么写,还是觉得这么写舒服
var mor = map[string]user{
"1号": {
"明羽", 23,
},
"2号": {
"小娜", 23,
},
}
fmt.Println(mor)
}
相关方法:
函数可以像值一样传递。
示例:
//函数闭包
func testB() func(int) int {
x := 10
return func(a int) int {
return x + a
}
}
// c 就是testB返回的方法c(i)就是调到x+a
func testA() {
c := testB()
for i := 0; i < 5; i++ {
fmt.Println(c(i))
}
}
初识 go 语言系列
//x表示以完成
关注公众号
原文:https://www.cnblogs.com/cmyxn/p/9291247.html