go语言学习

1、Go 程序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号

2、在 Go 程序中,一行代表一个语句结束

3、单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 /* 开头,并以 */ 结尾

4、标识符用来命名变量、类型等程序实体。一个标识符实际上就是一个或是多个字母(A~Z和a~z)数字(0~9)、下划线_组成的序列,但是第一个字符必须是字母或下划线而不能是数字。

5、关键字:break、default、func、interface、select、case、defer、go、map、struct、chan、else、goto、package、switch、const、fullthrough、if、range、type、continue、for、import、var、return。

6、程序一般由关键字、常量、变量、运算符、类型和函数组成。

     程序中可能会使用到这些分隔符:括号 (),中括号 [] 和大括号 {}。

     程序中可能会使用到这些标点符号:.、,、;、: 和 …。

7、Go 语言中变量的声明必须使用空格隔开

8、数据类型

类型名称有无符号bit数
int8 Yes 8
int16 Yes 16
int32 Yes 32
int64 Yes 64
uint8 No 8
uint16 No 16
uint32 No 32
uint64 No 64
int Yes 等于cpu位数
uint No 等于cpu位数
rune Yes 与 int32 等价
byte No 与 uint8 等价
uintptr No

       rune 类型是 Unicode 字符类型,和 int32 类型等价,通常用于表示一个 Unicode 码点。rune 和 int32 可以互换使用。

       byte 是uint8类型的等价类型,byte类型一般用于强调数值是一个原始的数据而不是 一个小的整数。

       uintptr 是一种无符号的整数类型,没有指定具体的bit大小但是足以容纳指针。 uintptr类型只有在底层编程是才需要,特别是Go语言和C语言函数库或操作系统接口相交互的地方。

       不管它们的具体大小,int、uint和uintptr是不同类型的兄弟类型。其中int和int32也是 不同的类型, 即使int的大小也是32bit,在需要将int当作int32类型的地方需要一个显式 的类型转换操作,反之亦然。

       有符号整数采用 2 的补码形式表示,也就是最高 bit 位用作表示符号位,一个 n bit 的有 符号数的值域是从 -2^{n-1} 到 2^{n-1}−1。例如,int8类型整数的值域是从-128 到 127, 而uint8类型整数的值域是从0到255。

9、整形运算

  

    二元运算符:算术运算、逻辑运算和比较运算,运算符优先级从上到下递减顺序排列

 *      /     %     <<     >>     &     &^ 
 +      -     |     ^      
 ==     !=    <     <=     >      >=
 &&
 ||

    在同一个优先级,使用左优先结合规则,但是使用括号可以明确优先顺序。

    算术运算符+、-、*和/可以适用与于整数、浮点数和复数,但是取模运算符%仅用于整数间的运算。 % 取模运算符的符号和被取模数的符号总是一致的。除法运算符/的行为则依赖于操作数是否 全为整数,比如5.0/4.0的结果是1.25,但是5/4的结果是1,因为整数除法会      向着0方向截断余数。

    两个相同的整数类型可以使用下面的二元比较运算符进行比较;比较表达式的结果是布尔类型。

 ==    equal to
 !=    not equal to
 <     less than
 <=    less than or equal to
 >     greater than
 >=    greater than or equal to

    个算术运算的结果,无论有无符号,超出的高位的bit位部分将被丢弃。如果原始的数值是有符号类型,而且最左边 的bit为是1的话,那么最终结果可能是负的。

    布尔型、数字类型和字符串等基本类型都是可比较的,也就是说两个相同类型的值可以用 == 和 != 进行比较。

    一元的加法和减法运算符:

 +      一元加法 (无效果)
 -      负数

    bit位操作运算符:

符号操作操作数是否区分符号
& 位运算 AND No
| 位运算 OR No
^ 位运算 XOR No
&^ 位清空 (AND NOT) No
<< 左移 Yes
>> 右移 Yes

     注意 位操作运算符^作为二元运算符时是按位异或(XOR),当用作一元运算符时表示按位取反。

     位操作运算符&^用于按位置零(AND NOT):对于表达式z = x &^ y, 如果对应y中某位bit位为 0 的话,结果z的对应的bit位等于x相应的bit位的值,否则 z 对应的bit位为0。

     

操作含义--
<< 左移 左移运算用零填充右边空缺的bit位
>> 右移 无符号数的右移运算用0填充左边空缺的bit位,有符号数的右移运算用符号位的值填充左边空缺的bit位

      一般来说,需要一个显式的转换将一个值从一种类型转化位另一种类型,并且算术和逻辑运算的二元操 作中必须是相同的类型。虽然这偶尔会导致需要很长的表达式,但是它消除了所有和类型相关的问题, 而且也使得程序容易理解。

     许多整形数之 间的相互转换并不会改变数值;它们只是告诉编译器如何解释这个值。但是对于将一个大尺寸的整数类 型转为一个小尺寸的整数类型,或者是将一个浮点数转为整数,可能会改变数值或丢失精度。 浮点数到整数的转换将丢失任何小数部分,然后向数轴       零方向截断。

     任何大小的整数字面值都可以用以0开始的八进制格式书写,例如0666;或用以0x或0X开头的十六进制格 式书写,例如0xdeadbeef。十六进制数字可以用大写或小写字母

 

10、浮点数

       Go语言提供了两种精度的浮点数,float32和float64

       一个float32类型的浮点数可以提供大约6个十进制数的精度,而float64则可以提供约15个十进制数的精度

       函数math.IsNaN用于测试一个数是否是非数NaN,math.NaN则返回非数对应的值。虽然可以用math.NaN来 表示一个非法的结果,但是测试一个结果是否是非数NaN则是充满风险的,因为NaN和任何数都是不相等的

11、复数

      Go语言提供了两种精度的复数类型:complex64和complex128,分别对应float32和float64两种浮点数精度。内置的complex函数用于构建复数,内建的real和imag函数分别返回复数的实部和虚部。

      复数也可以用==和!=进行相等比较。只有两个复数的实部和虚部都相等的时候它们才是相等的。 math/cmplx包提供了复数处理的许多函数,例如求复数的平方根函数和求幂函数

12、布尔类型

     一个布尔类型的值只有两种:true和false。if和for语句的条件部分都是布尔类型的值,并且==和<等比 较操作也会产生布尔型的值。一元操作符!对应逻辑非操作,因此!true的值为false。

      布尔值可以和&&(AND)和||(OR)操作符结合,并且可能会有短路行为:如果运算符左边值已经可以确 定整个布尔表达式的值,那么运算符右边的值将不在被求值

      布尔值并不会隐式转换为数字值0或1,反之亦然。必须使用一个显式的if语句辅助转换。

13、字符串

       标准库中有四个包对字符串处理尤为重要:bytes、strings、strconv和unicode包。

       strings包提供了许多如字符串的查询、替换、比较、截断、拆分和合并等功能。

       bytes包也提供了很多类似功能的函数,但是针对和字符串有着相同结构的[]byte类型。 因为字符串是只读的,因此逐步构建字符串会导致很多分配和复制。在这种情况下,使用 bytes.Buffer 类型将会更有效。

      strconv包提供了布尔型、整型数、浮点数和对应字符串的相互转换,还提供了双引号转义相关的转换。

      unicode包提供了IsDigit、IsLetter、IsUpper和IsLower等类似功能。

14、字符串与数据之间转换

        除了字符串、字符、字节之间的转换,字符串和数值之间的转换也比较常见。由strconv包提供这类转换功能。

       

函数名功能
strconv.Itoa() 整数到ASCII
strconv.FormatInt() 用不同的进制格式化数字
strconv.FormatUint() 用不同的进制格式化数字
strconv.Atoi() 将一个字符串解析为整数
strconv.ParseInt() 将一个字符串解析为整数

         ParseInt函数的第三个参数是用于指定整型数的大小;例如16表示int16,0则表示int。在任何情况下, 返回的结果y总是int64类型,你可以通过强制类型转换将它转为更小的整数类型。

         有时候也会使用fmt.Scanf来解析输入的字符串和数字,特别是当字符串和数字混合在一行的时候,它可 以灵活处理不完整或不规则的输入。

15、常量

       只有常量可以是无类型的。当一个无类型的常量被赋值给一个变量的时候,或者是语句中右边表达式含有明确类型的值,如果转换合法的话,无类型的常量将会被隐式转换为对应的类型。

      无论是隐式或显式转换,将一种类型转换为另一种类型都要求目标可以表示原始值。对于浮点数和复数,可能会有舍入处理。

      对于一个没有显式类型的变量声明语法(包括短变量声明语法),无类型的常量会被隐式转为默认的变量类型。

posted @ 2018-07-03 13:50  js初学者  阅读(438)  评论(0编辑  收藏  举报