《Go并发编程实战》读书笔记-语法概览

                                       作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

  本篇博客我们会快速浏览一下Go的语法,内容涉及基本构成要素(比如标识符,关键字,子面量,操作符等)和基本类型(比如bool,byte,rune,int,string等),高级类型(比如数组,切片,字典,接口,结构体等)和流程控制语句(if,switch,for,defer等)。

一.基本构成要素

  Go的语言符号又称为词法元素,共包括5类内容,即标识符(identifier),关键字(keyword),字面量(literal),分隔符(delimiter)和操作符(operator),它们可以组成各种表达式和语句,而后者都无需以分号结尾。

1>.标识符(identifier)

  标识符可以表示程序实体,前者即为后者的名称。在一般情况下,同一个代码块中不允许出现同名的程序实体。使用不同代码包中的程序实体需要用到限定标识符,比如:“os.0_RDONLY”。

  另外,Go中还存在着一类特殊的标识符,叫作定义标识符,他们是在Go源码中声明的。这类标识符包括以下几种:

    第一:所有基本数据类型的名称;

    第二:接口类型error;

    第三:常量true,false和iota;

  所有内建函数的名称,即:append,cap,close,complex,copy,delete,imag,len,make,new,panic,print,println,real和recover。这里强调一下空标识符,它由一个下划线("_")表示,一般用在变量声明或代码包导入语句中。若在代码中存在一个变量“x”,但是却不存在任何对它的使用,则编译器会报错。如果在变量“x”的声明代码后添加这样一行代码:“ _ = x”就可以绕过编译器检查,使它不产生任何编译错误。这是因为这段代码确实用到了变量“x”,只不过它没有在变量“x”上进行任何操作,也没有将它复制给任何变量。空标识符就像一个垃圾桶。在相关初始化工作完成之后,操作对象就会被弃之不用。

2>.关键字(keyword)

  关键字是指被编程语言保留的字符序列,编程人员不能把它们用作标识符。因此,关键字也称为保留字。

  Go的关键字可以分为3类,包括用于程序声明的关键字,用于程序实体声明和定义的关键字,以及用于程序流程控制的关键字,如下所示:

    程序声明: “improt”和“package”。

    程序实体声明和定义:“chan”,“const”,“func”,“interface”,“map”,“struct”,“type”和“var”。

    程序流程控制:“go”,“select”,“break”,“case”,“continue”,“default”,“defer”,“else”,“fallthrough”,“for”,“goto”,“if”,“range”,“return”和“switch”。

  Go的关键字共有25个,其中与并发编程有关的关键字又go,chan和select。

  这里特别说明一下关键字type的用途,即类型声明。我们可以使用它声明一个自定义的类型,如“type myString string”这里把名为myString的类型声明为string类型的一个别名类型。反过来说,string类型是myString类型的潜在类型。在看另一个例子,基本数据类型rune是int32类型的一个别名类型,int32类型就是rune的潜在类型。虽然类型及其潜在类型是不同的两个类型,但是他们的值可以进行类型转换,例如:string(myString("ABCD"))。这样的类型转换不会产生新值,几乎没声明代价。

  自定义的类型一般都会基于Go中的一个或多个预定义类型,就想上面的myString和string那样。如果为自定义类型关联若干方法(函数的变体),那么还可以让它成为某个或某些接口类型的实现类型。另外,还有一个比较特殊的类型,叫空接口。它的类型字面量是“interface{}”,在Go语言中,任何类型都是空接口类型的实现类型。

3>.字面量(literal)

  简单来说,字面量就是值的一种标记法。但是,在Go中,字面量的含义要更加广泛一些。我们常常用到的字面量有以下三类:

    第一:用于表示基础类型值的各种字面量。这是最常用到的一类字面量,例如表示浮点数类型值的“12E-3”。

    第二:用于构造各种自定义的复合数据类型的类型字面量,例如下面定义了一个名称为Name的结构体类型:        

type MyName struct {
Id int
Name string
}

    第三:用于表示复合数据类型的值的复合字面量,它可以用来构造struct(结构体),array(数组),slice(切片)和map(字典)类型的值。复合字面量一般有字面类型以及被花括号包裹的复合元素的列表组成。字面类型指的就是复合数据类型的名称。例如,下面的复合字面量构造了一个MyName 类型的值,其中MyName表示这个值的类型,紧随其后的就是由键值对表示的复合元素列表。

package main

type MyName struct {
Id int
Name string
} func main() { yzj := MyName{
Id:,
Name:"尹正杰",
} println(yzj.Id)
println(yzj.Name) }

4>.操作符(operator)

5>.表达式

二.基本类型

三.高级类型

四.流程控制语句

《Go并发编程实战》读书笔记-语法概览的更多相关文章

  1. Java并发编程实战 读书笔记(一)

    最近在看多线程经典书籍Java并发变成实战,很多概念有疑惑,虽然工作中很少用到多线程,但觉得还是自己太弱了.加油.记一些随笔.下面简单介绍一下线程. 一  线程与进程   进程与线程的解释   个人觉 ...

  2. Java并发编程实战 读书笔记(二)

    关于发布和逸出 并发编程实践中,this引用逃逸("this"escape)是指对象还没有构造完成,它的this引用就被发布出去了.这是危及到线程安全的,因为其他线程有可能通过这个 ...

  3. 《java并发编程实战》笔记

    <java并发编程实战>这本书配合并发编程网中的并发系列文章一起看,效果会好很多. 并发系列的文章链接为:  Java并发性和多线程介绍目录 建议: <java并发编程实战>第 ...

  4. Java多线程编程实战读书笔记(一)

    多线程的基础概念本人在学习多线程的时候发现一本书——java多线程编程实战指南.整理了一下书中的概念制作成了思维导图的形式.按照书中的章节整理,并添加一些个人的理解.

  5. Java并发编程实践读书笔记(5) 线程池的使用

    Executor与Task的耦合性 1,除非线程池很非常大,否则一个Task不要依赖同一个线程服务中的另外一个Task,因为这样容易造成死锁: 2,线程的执行是并行的,所以在设计Task的时候要考虑到 ...

  6. Java并发编程实践(读书笔记) 任务执行(未完)

    任务的定义 大多数并发程序都是围绕任务进行管理的.任务就是抽象和离散的工作单元.   任务的执行策略 1.顺序的执行任务 这种策略的特点是一般只有按顺序处理到来的任务.一次只能处理一个任务,后来其它任 ...

  7. Java并发编程实践读书笔记(2)多线程基础组件

    同步容器 同步容器是指那些对所有的操作都进行加锁(synchronize)的容器.比如Vector.HashTable和Collections.synchronizedXXX返回系列对象: 可以看到, ...

  8. C++并发编程实战---阅读笔记

    1. 当把函数对象传入到线程构造函数中时,需要避免“最令人头痛的语法解析”.如果传递了一个临时变量,而不是一个命名的变量:C++编译器会将其解析为函数声明,而不是类型对象的定义. 例如: class ...

  9. Java并发编程艺术读书笔记

    1.多线程在CPU切换过程中,由于需要保存线程之前状态和加载新线程状态,成为上下文切换,上下文切换会造成消耗系统内存.所以,可合理控制线程数量. 如何控制: (1)使用ps -ef|grep appn ...

随机推荐

  1. LitJson的用法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. Spring 使用介绍(八)—— 零配置(一)

    一.概述 所谓零配置,并不是说一点配置都没有了,而是配置很少而已.通过约定来减少需要配置的数量,提高开发效率. 零配置实现主要有以下两种方式: 惯例优先原则:也称为约定大于配置(convention ...

  3. IntelliJ IDEA Tomcat启动VM Options配置

    -server -XX:PermSize=512M -XX:MaxPermSize=1024m -Dfile.encoding=UTF-8 JDK8中用metaspace代替permsize,因此在许 ...

  4. python成长之路一

    1,计算机基础 CPU:中央处理器,相当于人类的大脑,运算中心,控制中心. 内存:暂时储存数据,与CPU交互,8G,16G,32G,64G § 优点:读取速度快. § 缺点:容量小,造价高,断电即消失 ...

  5. 洛谷P1462通往奥格瑞玛的道路题解

    [题目]: https://www.luogu.org/problemnew/show/P1462 题意 题目是给定了一张双向边,有边权的图,然后让我们求出一个最小值,满足一条路径上的最大的费用小于这 ...

  6. 用大O记号法测量算法的效率(Algorithm efficiency Asymptotic notation Big O notation)

    为什么要了解算法的效率? 一般来说,编程就是把各种已知的算法代入到自己的代码当中,以此来解决问题.因此,了解各种算法的效率对于我们选择一个合适的算法有很大帮助. 算法的效率由什么确定? 从算法分析的理 ...

  7. 【XSY2669】归并排序 树状数组 简单组合数学

    题目描述 有一个长度为\(n\)的排列\(n=2^k\),你要把这个数组归并排序.但是在长度为\(2\)的时候有\(\frac{1}{2}\)的概率会把两个数交换(就是有\(\frac{1}{2}\) ...

  8. 【BZOJ1419】Red is good 期望DP

    题目大意 桌面上有\(R\)张红牌和\(B\)张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到\(1\)美元,黑牌则付出\(1\)美元.可以随时停止翻牌,在最优策略下平均能得到多少钱 ...

  9. httpd配置

    HTTP:Hypertext Transfer Protocol: HTML:Hypertext Markup Language: URL:Uniform Resource Locator,在Inte ...

  10. CSS居中的几种方式总结

    1.水平居中的 margin:0 auto; 这个是用于子元素上的,前提是不受float影响 <style type="text/css"> .box{ width: ...