首页 > 其他分享 >Go基础部分

Go基础部分

时间:2022-10-09 16:55:41浏览次数:35  
标签:Name int Gender fmt 基础 json Go 部分 ID

学习Go基础之后的一些重要注意事项

Slice

切片可以理解为三个指针维护下的数组
ptr, len, cap

var arr = [5]int // 标准数组,标准数组直接可以==比较,切片只是个引用,是不能直接比较的
var b = []int{} // 这是已经进行了初始化的,它不等于nil
var slice2 []string // 它等于nil

var slice3 = make([]int, 5, 100) // 给两个初始值,一个是初始化的容量,一个是cap大小
slice3 := make([]int, 0, 16) // 初始一个空的

Map

// map的创建
m = make(map[string]int) // 可以初始化大小也可以不

// map通过这个判断有无key,但是如果一般操作的时候,可以直接用就行,不用初始化不会报错
if v, ok = map["key"]; ok {
	fmt.Println(v)
} else {
	fmt.Println("not exists")
}

指针

要合理的理解指针,在内存当中,我们的数据都是放在一个专门的地址上的。我们使用的是地址上对应的值。而指针,就是指向这个内存地址的变量。

  • *&操作,去获取一个变量的内存地址
  • *操作,去读取这个内存地址对应的值

再加上go语言中是值传递的,如果是传递指针的值也是值传递,它都是进行一份拷贝以后才会进行方法

Defer

Go语言中的return并不是一个原子操作,它进行了两步

  • 对return的值赋值
  • 执行ret

而defer做的就是在中间插入一个这个方法的执行,这时已经获取了这个方法所有的args,只是延缓执行罢了。而多个defer,第一个defer的最后执行,相当于它已经融入了ret当中,而下一个还是往中间插入。
经典面试题来了:
image

闭包

闭包这个概念一开始还是难理解,后面我就干脆不想理解它了,就把一个方法当成是一个变量,它其中的东西都被继承执行了。

结构体

在Go里面只有结构体这个思想的。
结构体对象其实只是一个指针,它指针指向了这个结构体内存的最开始的地方,然后平铺补齐内存

type Student struct {
	ID int `json:"id"`
	Address string
	name string // 小写是一个私有对象,不能在包外访问,也不可以被json序列化
}

type Class struct {
	ID int
	Students []*Student
}

func main() {
	c := &Class{
		Title:    "101",
		Students: make([]*Student, 0, 200),
	}

	for i := 0; i < 10; i++ {
		c.Students = append(c.Students, &Student{
			ID:     i,
			Gender: "g",
			Name:   strconv.Itoa(i) + "g",
		})
	}
	//JSON序列化:结构体-->JSON格式的字符串
	//私有不能被json包访问
	//data, err := json.Marshal(c)
	//if err != nil {
	//	fmt.Println("json marshal failed")
	//	return
	//}
	data, err := json.Marshal(c)
	if err != nil {
		fmt.Println("json marshal failed")
		return
	}
	fmt.Printf("json:%s\n", data)
	//JSON反序列化:JSON格式的字符串-->结构体
	str := `{"Title":"101","Students":[{"ID":0,"Gender":"男","Name":"stu00"},{"ID":1,"Gender":"男","Name":"stu01"},{"ID":2,"Gender":"男","Name":"stu02"},{"ID":3,"Gender":"男","Name":"stu03"},{"ID":4,"Gender":"男","Name":"stu04"},{"ID":5,"Gender":"男","Name":"stu05"},{"ID":6,"Gender":"男","Name":"stu06"},{"ID":7,"Gender":"男","Name":"stu07"},{"ID":8,"Gender":"男","Name":"stu08"},{"ID":9,"Gender":"男","Name":"stu09"}]}`
	c1 := &Class{}
	err = json.Unmarshal([]byte(str), c1)
	if err != nil {
		fmt.Println("json unmarshal failed!")
		return
	}
	fmt.Printf("%#v\n", c1)
}

标签:Name,int,Gender,fmt,基础,json,Go,部分,ID
From: https://www.cnblogs.com/azxx/p/16772752.html

相关文章

  • Go中的闭包、递归
    一闭包详解闭包的应该都听过,但到底什么是闭包呢?闭包是由函数及其相关引用环境组合而成的实体(即:闭包=函数+引用环境)。“官方”的解释是:所谓“闭包”,指的是一个拥有许......
  • 测试基础学习 - mysql
    mysql介绍MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品。MySQL将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度......
  • 文件操作基础
    目录文件操作基础文件操作代码打开文件的两种方式文件读写文件操作模式文件的方法文件内光标的移动文件光标实战作业文件操作基础文件操作文件是操作系统暴露给用户操作......
  • SQL基础语句入门
    SQL语句入门起因学校开设数据库相关的课程了,打算总结一篇关于基础SQL语句的文章。SQL介绍SQL最早版本是由IBM开发的,一直发展到至今。SQL语言有如下几个部分:数据定义......
  • mongo常用
    默认端口 介绍27017 mongod和mongos实例的默认端口,你可以通过port或--port改变该端口27018 设置--shardsvr运行变量或在配置文件里设置clusterRole为shards......
  • 2022-2023-1 20221415 《计算机基础与程序设计》第六周学习总结
    2022-2023-120221415《计算机基础与程序设计》第六周学习总结作业信息这个作业属于哪个课程<班级的链接>(2022-2023-1-计算机基础与程序设计)这个作业要求在哪......
  • 2022-2023-1 20221304 《计算机基础与程序设计》第六周学习总结
    2022-2023-120221304《计算机基础与程序设计》第六周学习总结作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP这个作业......
  • CentOS 7.9 安装 django-3.2.10
    一、CentOS7.9安装django-3.2.10地址https://www.djangoproject.comhttps://github.com/django/django二、安装django先得安装pythonpython3python3-Vpip3-......
  • Google 发布:DevOps 2022现状报告
    在过去的八年中,全球超过33,000名专业人士参与了AccelerateStateofDevOps调查,使其成为同类研究中规模最大、运行时间最长的一项。AccelerateStateofDevOps报告提......
  • Go中select条件语句详解
    一select语句select语句类似于switch语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。select是Go中的一个控制结构,类似......