前言: 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表示以完成

关注公众号

初识 go 语言:数据类型的更多相关文章

  1. 初识 go 语言:方法,接口及并发

    目录 方法,接口及并发 方法 接口 并发 信道 结束语 前言: go语言的第四篇文章,主要讲述go语言中的方法,包括指针,结构体,数组,切片,映射,函数闭包等,每个都提供了示例,可直接运行. 方法,接 ...

  2. 初识 go 语言:语法

    目录 语法 for 循环 if 语句 switch 语句 defer 语句 defer 栈 结束 前言: go语言系列第二篇,主要讲述go语言的语法,如循环,if判断,swich语句,defer语句, ...

  3. 01_初识C语言

    第一章 - 初识C语言 基本了解C语言的基础知识,对C语言有一个大概的认识. 每个知识点就是简单认识,不做详细讲解. 1. 什么是C语言? C语言是一门通用计算机编程语言,广泛应用于底层开发.C语言的 ...

  4. C语言数据类型的理解

    数据类型的定义: 作为一种语言,必然有所谓的语言组成要素,就像日常生活中人们之间的交流一样,首先会有字,字再成词组,再来就是句子,后来呢就是段落等等.当然不同的字,词,句这些在一起,就会有不同的表达效 ...

  5. R语言数据类型

    R语言数据类型[转!!]Zhao-Pace  https://www.cnblogs.com/zhao441354231/p/5970544.html   R语言用来存储数据的对象包括: 向量, 因子 ...

  6. 初识 go 语言

    目录 go简介 安装 hello world 函数 变量 常量 可见性规则 结束 前言: 最近组内要试水区块链,初步方案定为使用fabirc来弄,而fabric的智能合约就是用go写的,借此机会正好学 ...

  7. 《Go并发编程实战》读书笔记-初识Go语言

    <Go并发编程实战>读书笔记-初识Go语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在讲解怎样用Go语言之前,我们先介绍Go语言的特性,基础概念和标准命令. 一. ...

  8. Go语言 数据类型,流程控制

    Go语言 数据类型,流程控制 人生苦短,Let's Go ! package main // 必须要有一个main包 import "fmt" func main() { fmt. ...

  9. 第二百五十八节,Tornado框架-逻辑处理get()方法和post()方法,初识模板语言

    Tornado框架-逻辑处理get()方法和post()方法,初识模板语言 Tornado框架,逻辑处理里的get()方法,和post()方法 get()方法,处理get方式的请求post()方法,处 ...

随机推荐

  1. android.database.sqlite.SQLiteException: no such column: aaa (code 1): , while compiling: DELETE FROM users WHERE user_name=aaa解决办法

    在写安卓登录注册时注销按钮闪退发现: 这是因为此处错误: 因为用户名为字符串,不是整型,数据库查询要引号,少了引号查询不了,导致闪退 解决后成功运行 正确用法: 下次谨记,细节决定成败呀!

  2. 解决service iptables save出错please try to use systemctl

    # service iptables save The service command supports only basic LSB actions (start, stop, restart, t ...

  3. Python生成器、推导式之前襟后裾

    生成器 函数体内有yield选项的就是生成器,生成器的本质是迭代器,由于函数结构和生成器结构类似,可以通过调用来判断是函数还是生成器,如下: def fun(): yield "我是生成器& ...

  4. 【原】Java学习笔记001 - JAVA开发环境搭建

    1.JDK下载并安装,以jdk-7u45-windows-i586.exe为例(注意JDK的安装和JRE的安装是分开的) 2.“我的电脑”右键属性,找到“高级系统设置”,找到“高级”tab下的“环境变 ...

  5. 6.2Python数据处理篇之pandas学习系列(二)Series数据类型

    目录 目录 (一)Series的组成 (二)Series的创建 1.从标量中创建Series数据 2.从列表中创建Series数据 3.从字典中创建Series数据 4.从ndarry中创建Serie ...

  6. LeetCode算法题-Valid Palindrome II(Java实现)

    这是悦乐书的第287次更新,第304篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第155题(顺位题号是680).给定非空字符串s,最多可以删除一个字符. 判断它是否是回 ...

  7. Docker:测试环境的准备-建立一台centos测试机

    一.安装虚拟机并配置网络,下面演示在一台工作机上搭建环境 基础准备: 安装VMware-workstation-full-15.0.0-10134415.exe 安装虚拟机,镜像文件:CentOS-7 ...

  8. Thread中yield方法

    先上一段代码 public class YieldExcemple { public static void main(String[] args) { Thread threada = new Th ...

  9. kernel笔记——进程调度

    调度器完成以下任务: 时钟中断(或类似的定时器)时间内刷新进程的时间片,设置进程调度标志 系统调用返回或中断完成时检查调度标志 schedule函数 内核代码中完成进程调度的函数为schedule() ...

  10. Taro文件上传:Blob Url下载Blob对象本身并通过接口上传到服务器

    最近项目的文件上传遇到一个问题,就是Taro的chooseImage传给回调的是一个Blob对象,一般来说,上传控件都会导出Data Url,而Taro给了一个Blob Url,问题在于,我直接令im ...