前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Golang语言--细节汇总

Golang语言--细节汇总

作者头像
李海彬
发布2018-03-21 17:46:37
7360
发布2018-03-21 17:46:37
举报
文章被收录于专栏:Golang语言社区Golang语言社区

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数据

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • New与make
  • 流程控制
  • 函数
  • defer
  • Panic和 Recover
  • main函数和 init函数
  • 面向对象
  • interface
  • 反射
  • 并发
  • 25个关键字
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档