14.笔记go语言——细节汇总一
来源:互联网 发布:美女网络歌手毛慧 的歌 编辑:程序博客网 时间:2024/06/18 15:37
14.笔记go语言——细节汇总一
slice和数组在声明时的区别:声明数组时,方括号内写明了数组的长度或使用...自动
计算长度,而声明slice时,方括号内没有任何字符。
对于slice有几个有用的内置函数:
l len 获取slice的长度
l cap 获取slice的最大容量
l append 向slice里面追加一个或者多个元素,然后返回一个和slice一样类型的slice
l copy 函数copy从源slice的src中复制元素到目标dst,并且返回复制的元素的个数
make用于内建类型(map、slice 和channel)的内存分配。new用于各种类型的内存分配。
New与make
内建函数new本质上说跟其它语言中的同名函数功能一样:new(T)分配了零值填充的T类型的内存空间,并且返回其地址,即一个*T类型的值。用Go的术语说,它返回了一个指
针,指向新分配的类型T的零值。有一点非常重要:
new返回指针。
内建函数make(T, args)与new(T)有着不同的功能,make只能创建slice、map和channel,
并且返回一个有初始值(非零)的T类型,而不是*T。本质来讲,导致这三个类型有所不同的
原因是指向数据结构的引用在使用前必须被初始化。例如,一个slice,是一个包含指向数
据(内部array)的指针、长度和容量的三项描述符;在这些项目被初始化之前,slice为
nil。对于slice、map和channel来说,make初始化了内部的数据结构,填充适当的值。
make返回初始化后的(非零)值。
流程控制
流程控制包含分三大类:条件判断,循环控制和无条件跳转。
Go里面最强大的一个控制逻辑就是for,它即可以用来循环读取数据,又可以当作while来控制逻辑,还能迭代操作。
for配合range可以用于读取slice和map的数据.
Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码。
函数
函数是Go里面的核心设计,它通过关键字func来声明,它的格式如下:
func funcName(input1 type1, input2 type2)(output1 type1, output2 type2) {
//这里是处理逻辑代码
//返回多个值
return value1, value2
}
Go函数支持变参。 接受变参的函数是有着不定数量的参数的。为了做到这点,首先需要定义函数使其接受变参:
func myfunc(arg ...int) {}
arg ...int告诉Go这个函数接受不定数量的参数。注意,这些参数的类型全部是int。
defer
Go语言中有种不错的设计,即延迟(defer)语句,你可以在函数中添加多个defer语句。
当函数执行到最后时,这些defer语句会按照逆序执行,最后该函数返回。
Panic和 Recover
Go没有像Java那样的异常机制,它不能抛出异常,而是使用了panic和recover机制。应当把它作为最后的手段来使用,也就是说,你的代码中应当没有,或者很少有panic的东西。这是个强大的工具,请明智地使用它。
main函数和 init函数
Go里面有两个保留的函数:init函数(能够应用于所有的package)和main函数(只能应
用于package main)。
面向对象
Go语言可以设计出基本的面向对象的程序了,但是Go里面的面向对象是如此的简单,没有任何的私有、公有关键字,通过大小写来实现(大写开头的为共有,小写开头的为私有),方法也同样适用这个原则。
interface
Go语言里面设计最精妙的应该算interface,它让面向对象,内容组织实现非常的方便。interface是一组method的组合,我们通过interface来定义对象的一组行为。
反射
Go语言实现了反射,所谓反射就是动态运行时的状态。我们一般用到的包是reflect包。
并发
有人把Go比作21世纪的C语言,第一是因为Go语言设计简单,第二,21世纪最重要的就是并行程序设计,而GO从语言层面就支持了并行。
goroutine是Go并行设计的核心。
goroutine是通过Go的runtime管理的一个线程管理器。
25个关键字
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
• var和const 是Go语言基础里面的变量和常量申明
• package和import已经有过短暂的接触
• func 用于定义函数和方法
• return 用于从函数返回
• defer 用于类似析构函数
• go 用于并行
• select 用于选择不同类型的通讯
• interface 用于定义接口,
• struct 用于定义抽象数据类型,
• break、 case、 continue、 for、 fallthrough、 else、 if、 switch、 goto、 default里面
• chan用于channel通讯
• type用于声明自定义类型
• map用于声明map类型数据
• range用于读取slice、map、channel数据
- 14.笔记go语言——细节汇总一
- 50.笔记go语言——go语言函数细节
- Go语言学习笔记一——环境搭建
- GO语言学习笔记一
- GO语言学习笔记(一)
- 43.笔记go语言圣经——go语言特性
- 45.笔记go语言圣经——go语言变量
- 51.笔记go语言——go语言数据结构
- 59.笔记go语言——go语言中的反射
- Go语言学习笔记(一) [Go语言的HelloWorld]
- 31.笔记go语言——go doc命令
- 42.笔记go语言圣经——go起源
- 46.笔记go语言圣经——go运行时
- 48.笔记go语言圣经——go图形化
- 55.笔记go语言——go类型
- 56.笔记go语言——go的函数类型
- 2.笔记go语言——包
- 3.笔记go语言——函数
- Spring知识整理【一】Spring 入门介绍
- PM经验谈 项目管理工具必备的5个功能
- Python cv2.VideoCapture失败打不开视频
- 关于D3.js
- x86从实模式到保护模式实验说明
- 14.笔记go语言——细节汇总一
- TFT LCD 的 vsync,hsync,hspw,hbpd,hfpd, vspw,vbpd, vfpd 等参数的理解
- Ubuntu14.04 Golang环境配置
- hibernate分页
- 快速排序
- LCD驱动中pixclock的计算
- UNIX环境高级编程笔记之线程
- HDU 6115 Factory(在线倍增LCA)
- 18. 4Sum