第2课 Go类型、变量、常量、运算符

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lhdalhd1996/article/details/52047402

类型与变量

package main

import (
    "fmt"
    "math"
)

type (
    byte int8
    rune int32
    文本   string //别名
)

var (
    name string = "HUIDI"
    help bool   = false
) //全局变量的声明方式

func main() {
    fmt.Println(name)
    fmt.Println(help)
    fmt.Println("------") //输出全局变量

    var b 文本
    b = "中文类型名"
    fmt.Println(b)
    fmt.Println(math.MaxInt32)
    fmt.Println("------")

    var a, c = 1, 3 //声明方式
    fmt.Println(a + c)
    fmt.Println("------")

    d := 2 //声明方式
    fmt.Println(d)
    fmt.Println("------")

    f, g := "我是f", "我是g" //多个变量的声明方式
    fmt.Println(f + g)
    fmt.Println("------")

    q, _, e, r := 1, 2, 3, 4 //可以用_来忽略对应位置。
    fmt.Println(q)
    fmt.Println(e)
    fmt.Println(r)
    fmt.Println("------")

    /*
        Go中不存在隐式转换,所有类型转换必须显式声明
        转换只能发生在两种互相兼容的类型之间
        类型转换的格式:
        <ValueA> [:] = <TypeOfValueA>(<ValueB>)
        注意,当ValueA还没有被声明的时候使用冒号
    */
    var aa float32 = 100.1
    fmt.Println(aa)
    bb := int(aa)
    fmt.Println(bb)
}

常量与运算符

package main

import (
    "fmt"
)

/*
    常量的值在编译的时候就已经确定了
    常量的定义格式与变量基本相同
    等号右侧必须是常量或者常量表达式
    常量表达式中的函数必须是内置函数
*/
const a int = 1
const b = 'A'
const (
    c = a
    d = a + 1
    e = a + 2
)
const f, g, h = 1, "2", "h"

/*
在定义常量组时,如果不提供初始值,则表示将使用上行的表达式
使用相同的表达式不代表具有相同的值
iota是常量的计数器,从0开始,组中每定义一个常量自动递增1
通过初始化规则与iota可以达到枚举的效果
每遇到一个cost关键字,iota会重置为0
*/
const (
    //aa与bb都为'A'
    aa = 'A'
    bb
    cc = iota
    dd //dd的值为3
)
const (
    ee = iota
    ff //ff的值为1
)

func main() {
    /*
        Go 中的运算符都是从左向右结合的
        优先级(从高到低)
            ^ !                 (一元运算符)
            * / % << >> & &^
            + - | ^             (二元运算符)
            == != < <= >= >
            <-      (专门用于channel)
            &&
            ||
    */
    //<<左移
    fmt.Println(1 << 10)             //左移10个位,得到结果1024
    fmt.Println(1 << 10 << 10 >> 10) //左移动10个位,再左移动10个位,再右移10个位
    /*
        位运算符(看二进制来进行运算)
        6 : 0110
        11: 1011
        --------
        &   0010    对每一位做与运算符
        |   1111    对每一位做或运算符
        ^   1101    对每一位只有一个1才是1,否则是0
        &^  0100    对每一位,下面的是1,上面的就要变为0,下面是0,上面不做变化
    */
    fmt.Println("--------")
    a := 1
    if a > 0 && (10/a) > 1 {
        fmt.Println("OK")
    }
    //如果a大于0,再判断&&后面的条件,如果前面的条件已经是假的,则不走后面的判断了
}

利用iota实现一个常量枚举

package main

import (
    "fmt"
)

const (
    B float64 = 1 << (iota * 10)
    KB
    MB
    GB
    TB
    PB
    EB
    ZB
    YB
) //一个计算机存储单位的枚举

func main() {
    fmt.Println(GB)
}

猜你喜欢

转载自blog.csdn.net/lhdalhd1996/article/details/52047402