zoukankan      html  css  js  c++  java
  • 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、常量

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

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

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

  • 相关阅读:
    dede织梦调取一二三级栏目名及栏目下的内容列表的方法
    Maven 加载ojdbc14.jar报错,解决方法
    vue.set动态新增对象属性,触发dom渲染
    object_funs.py
    module+standard library.py
    function.py
    exception.py
    assign.py
    if_test.py
    hello.py
  • 原文地址:https://www.cnblogs.com/gpzhen/p/9258192.html
Copyright © 2011-2022 走看看