• 初识 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+a
    func testA() {
    	c := testB()
    	for i := 0; i < 5; i++ {
    		fmt.Println(c(i))
    	}
    }
    

    ##结束语 **初识 go 语言系列** - [x] 初识 go 语言 - [x] 初识 go 语言:语法 - [x] 初识 go 语言:数据类型 - [ ] 初识 go 语言:方法,接口及并发

    x表示以完成

    关注公众号
    关注我的公众号

  • 相关阅读:
    深入理解ThreadLocal
    JAVA守护线程
    JAVA THREAD.JOIN方法详解
    JAVA中断机制详解
    Socket中的异常和参数设置
    WebSocket实战
    程序里面的system.out.println()输出到其他位置,不输出到tomcat控制台。
    数据库连接未关闭,conn与rs未关闭
    Ajax简单应用-购物车
    1.链表和数组的区别在哪里?
  • 原文地址:https://www.cnblogs.com/cmyxn/p/9291247.html
Copyright © 2020-2023  润新知