《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. P1028 数的计算

    P1028 题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n≤1000),然后对此自然数按照如下方法进行处理: 不作任何处理; 在它的左边加上一个自然数,但该 ...

  2. BZOJ3230 相似子串 【后缀数组】

    题目分析: 容易想到sa排好序之后,子串排名就是前面的子串减去height数组.所以正着做一遍,倒着做一遍就行了. 代码: #include<bits/stdc++.h> using na ...

  3. MT【309】正弦的平方差公式

    在锐角$\Delta ABC$中,角$A,B,C$所对的边分别为$a,b,c$,且满足$b^2-a^2=ac$,则$\dfrac{1}{\tan A}-\dfrac{1}{\tan B}$ 的取值范围 ...

  4. MT【262】一道常见错题

    若$f(x^2)$的定义域为$[-1,1]$,则函数$f(x)$的定义域为______ 设$a>0$构造$f(x)=\sqrt{x(1-x)(a+x)}$,此时$f(x^2)$的定义域为$[-1 ...

  5. LOJ#2019. 「AHOI / HNOI2017」影魔

    题意: 在一个序列中 如果有一个子区间 它有一个端点是区间最大值 另一个端点不是这个区间的次大值 就会有p2的贡献 它两个端点分别是最大值次大值 就会有p1的贡献 我们发现这两个条件有一个重合的部分 ...

  6. Android里透明的ListView

    发现了一个list滚动时,某item背景透明的问题.网上搜索一下,发现有很多人在问list背景黑色的问题,交流中给出的解决方案基本上很统一. 先是解释问题产生的原因是Android对list的滚动做了 ...

  7. 【CF833D】Red-Black Cobweb(点分治)

    [CF833D]Red-Black Cobweb(点分治) 题面 CF 有一棵树,每条边有一个颜色(黑白)和一个权值,定义一条路径是好的,当且仅当这条路径上所有边的黑白颜色个数a,b满足2min(a, ...

  8. Nginx代理MysqlCluster集群(二)

    Nginx代理MySql集群本次实验采用nginx 版本1.12以上 集合了tcp代理功能只需在编译时明文开启指定的功能 --with-stream--prefix=/usr/local/ngin - ...

  9. Hyper-V

    docker与vm同时安装,会导致虚拟机无法启动及网络不通等问题,解决方法分为两步. 1.在网络连接中禁用vEthernet连接. 2.控制面板>程序>程序和功能中 >启用或关闭wi ...

  10. hdu 1081 To The Max(二维压缩的最大连续序列)(最大矩阵和)

    Problem Description Given a two-dimensional array of positive and negative integers, a sub-rectangle ...