美文网首页Go语言从入门到精通
Go语言从入门到精通-01 | 数据类型与表达式

Go语言从入门到精通-01 | 数据类型与表达式

作者: SunnyZhang的IT世界 | 来源:发表于2019-03-15 20:47 被阅读5次

    请从github下载配套代码: https://github.com/shuningzhang/learn_golang
    电子书下载地址: https://u19702000.ctfile.com/dir/19702000-33357795-bb2f31/

    上一篇文章我们给了一个入门程序,接下来我们介绍在Go语言中的数据类型和表达式相关的内容。由于本文是简介性的文章,因此并不会事无巨细的介绍所有内容,只是能够让读者达到理解基本概念,并能够使用的程度,更为深入的学习还需要其它材料。

    这个图片是装饰

    数据类型与变量

    同任何其它编程语言一样,Go语言支持多种类型的数据。从大的分类上面Go语言支持布尔类型、数字类型、字符串和派生类型等几种。

    变量是存储数据的存储空间的别名,通过变量开发人员可以方便的访问内存空间,也就是访问其中存储的数据。Go语言的变量是类型相关的,也就是定义变量时需要指定变量的类型,不同类型的变量占用的内存空间是不同的。

    下面我们通过一个具体的示例说明数据类型和变量。

    package main 
    
    import "fmt"
    
    func main() { 
    
        /* 下面一行定义一个int8类型的变量,也称为声明
         * 变量。 可以看出声明方式由3部分构成,关键字
         * var,变量名var_name和变量类型int8。Go语言的
         * 变量声明方式与C或者Java等语言的方式不太一
         * 样,刚开始学可能觉得有些怪,但并非Go语言独创。*/
        var var_name int8
    
        /* 变量的赋值,也就是让变量的内容变为某个值。 */
        var_name = 5
    
        /* 定义一个16位的整型数,第二行进行2个变量运
         * 算。 由于变量的类型不一样,因此需要进行强制
         * 类型转换。 */
        var var_name_x int16
        var_name_x = 11 + int16(var_name)
        
        /* 上面介绍的都是数字型的数据类型,除了上面的
         * 类型外,还有int32,int64,uint8,uint16,
         * uint32,uint64等类型,这些表示的是整型数。
         * 而以uint头的表示无符号整型数。 */
    
        fmt.Println(var_name_x)
        
        /* 除了整型数外,还有浮点型数,浮点型数就是我们
         * 日常说的小数 */
        var float_name float32
        float_name = 1.2
        
        fmt.Println(float_name)
        /* 浮点型数包括32位和64位两种,也就是float32和float64。 */
        
        /* 下面介绍的类型是字符串类型。 */
        var str_name string
        str_name = "test"
        fmt.Println(str_name)
        
        /* 变量可以在声明的时候直接初始化。 */
        var int_name int16 = 12
        fmt.Println(int_name)
        
        /* 可以同时声明多个变量,如下是定义3个都为
         * int32类型的变量,并进行初始化,初始化并非
         * 强制要求的 */
        var int_name_1, int_name_2, int_name_3 int32 = 1, 2, 3 
        fmt.Println(int_name_1, int_name_2, int_name_3)
        
        /* 可以不声明变量类型,这样编译器会自动选择类型 */
        var int_name_4 = 160
        
        /* 下面是最简单的变量声明方式,可以将var关键字省略 */
        int_name_5 := 170
        fmt.Println(int_name_4, int_name_5)
        
        /* 最后说明一下,变量名可以字母、下划线和数字,但只能以非数字开头。*/
        
    }
    

    当然,这里介绍了有限的几种数据类型,但在后面的使用中基本上够用了。

    运算符和表达式

    程序大部分都是进行运算的,了解了变量的这些类型,我们看一下Go语言如何进行计算。Go语言的计算包括常规的加减乘除、关系运算、位运算和逻辑运算。这些运算与其它语言的运算并没有任何本质的差异,运算符也基本一致。

    运算符,所谓运算符就是进行运算的符号,比如+、-、*和/等,分别表示加减乘除。而>则用于计算两个值的大小关系。

    表达式是运算符和数字或者变量的组合,用于进行一系列的计算,最后会计算出一个结果。表达式中各个运算符之间有优先级,基本遵循数学运算的规则。

    package main 
    import "fmt"
    func main() { 
            var int_name_1, int_name_2, int_name_3 int32 = 1, 2, 3
        var int_name_4 int32 = 0
    
        /* Go语言支持常见的算术云算法,包括加减乘除和取模等 */
        int_name_4 = int_name_1 + int_name_2
        int_name_4 = int_name_1 - int_name_2
        int_name_4 = int_name_1 * int_name_2
        int_name_4 = int_name_1 / int_name_2
        int_name_4 = int_name_1 % int_name_2 /*取模*/
    
        int_name_3 ++ //自增
        int_name_3 --
    
        fmt.Println(int_name_1, int_name_2, int_name_3, int_name_4)
    
        /* 关系运算,也就是判断2个变量的大小关系,如果满足条件则返回真(true),否则返回假(false) */
        var a bool
    
        /* 举个简单的例子,计算1是否大于2,如果大于则返回true,否则返回false。结果是显然的 */
        a = 1 > 2 
        fmt.Println(a)
    
        a = 1 < 2
        a = 1 >= 2
        a = 1 <= 2
        a = 1 == 2 //相等判断
        a = 1 != 2 //不等判断
    
        /* 逻辑运算,也称为布尔运算,判断一个或者多个值或者变量的逻辑关系 */
        var b = bool
    
        b = 1 && 1 //与运算
        b = 1 || 1 //或运算
        b = !1 //非运算
        fmt.Println(b)
    
        /* 除了上述运算外,还有位运算,分别用& | ^表示按位与、或和异或运算。本文不在赘述。 */    
    
    }
    
    

    运算符的优先级

    我们在一个表达式中不可能只用一个云算法,同时运用多个运算符的情况是经常存在的。因此Go语言中定义了在同时出现多个运算符是的等级。等级越高,则表示该运算符会优先执行。优先顺序依次为:

    1. ^ !
      • / % << >> & &^
        • | ^
    2. == != < <= >= >
    3. <-
    4. &&
    5. ||

    同一级别的从左向右执行。另外,括弧优先级是最高的,也就是括弧中的内容会优先执行,下面是例程:

    package main
    import "fmt"
    func main() {
         var a int = 20
         var b int = 10
         var c int = 15
         var d int = 5
         var e int;
    
         e = (a + b) * c / d; // ( 30 * 15 ) / 5
         fmt.Printf("(a + b) * c / d 的值为 : %d", e );
    
         e = ((a + b) * c) / d; // (30 * 15 ) / 5
         fmt.Printf("((a + b) * c) / d 的值为 : %d" , e );
    
         e = (a + b) * (c / d); // (30) * (15/5)
         fmt.Printf("(a + b) * (c / d) 的值为 : %d", e );
    
         e = a + (b * c) / d; // 20 + (150/5)
         fmt.Printf("a + (b * c) / d 的值为 : %d" , e ); 
    }
    
    

    好了,今天先到这,学完本文基本上清楚了在程序设计中如何进行运算。后面我们再介绍函数的概念。

    相关文章

      网友评论

        本文标题:Go语言从入门到精通-01 | 数据类型与表达式

        本文链接:https://www.haomeiwen.com/subject/enfdmqtx.html