New与make

notbaron · · 402 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:notbaron

查看原文:New与make

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:1006366459

402 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传