您现在的位置是:网站首页> 内容页

初识 go 语言:数据类型

  • mgm娱乐登录地址
  • 2019-05-26
  • 44人已阅读
简介目录数据类型指针结构体数组切片切片的方法映射函数闭包结束语前言:go语言的第三篇文章,主要讲述go语言中的数据类型,包括指针,结构体,数组,切片,映射,函数闭包等,每个都提供了示例,

目录

数据类型指针结构体数组切片切片的方法映射函数闭包结束语

前言: go语言的第三篇文章,主要讲述go语言中的数据类型,包括指针,结构体,数组,切片,映射,函数闭包等,每个都提供了示例,可直接运行。


数据类型

指针

指针保存了值的内存地址;

(* 操作符)表示指针指向的底层值;(& 操作符)会生成一个指向其操作数的指针;示例:

func testPoint() { i := 20 p := &i fmt.Println(*p) *p = 1 fmt.Println(i)}

解读:*p 的值为 20 ,i 的值为 1

第一个输出:通过指针 p 读取 i第二个输出: 通过指针 p 设置 i

结构体

使用 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的数据 [下标前算后不算,中间用:分割]:

[1:3] 下标1到3; [:2]:下标0到2之前;[1:]下标为1。

切片并不存储任何数据,它只是描述了底层数组中的一段,所以修改切片数据,数组数据也会改变。切片 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:

make创建切片b := make([]int, 0, 5)参数含义: 1.类型,2:len(长度),3:cap(容量);

append

追加切片数组 s = append(s, 2, 3, 4)给切片s尾部追加元素2,3,4

Range

用于for循环遍历切片或映射每次迭代都会返回两个值:第一个值为当前元素的下标,第二个值为该下标所对应元素的一份副本可以将下标或值赋予 _ 来忽略它若你只需要索引,去掉value 的部分即可

示例:

//切片方法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)}

相关方法:

在映射 m 中插入或修改元素:m[key] = elem获取元素:elem = m[key]删除元素:delete(m, key)通过双赋值检测某个键是否存在:elem, ok = m[key]若 key 在 m 中,ok 为 true;否则,ok 为 false。若 key 不在映射中,那么 elem 是该映射元素类型的零值若 elem 或 ok 还未声明,你可以使用短变量声明:elem, ok := m[key]

函数闭包

函数可以像值一样传递。示例:

//函数闭包func testB() func(int) int { x := 10 return func(a int) int { return x + a }}// c 就是testB返回的方法c(i)就是调到x+afunc testA() { c := testB() for i := 0; i < 5; i++ { fmt.Println(c(i)) }}

结束语

初识 go 语言系列

[x] 初识 go 语言[x] 初识 go 语言:语法[x] 初识 go 语言:数据类型[ ] 初识 go 语言:方法,接口及并发

x表示以完成

关注公众号

文章评论

Top