摘要:
I变量packagemainimport“fmt”funcmain()的定义{/*什么是变量:var variable name Data type=value(3)自动派生类型(根据值的类型确定变量名的类型)语法格式:=value*//1>:.声明变量varnamestringname=“JasonYin”fmt.Println(name)fmt.Printf(“变量名的数据类型为:

         Golang的变量定义及使用案例

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

 

一.变量的定义

package main

import "fmt"

func main() {
    /*
        什么是变量:
            在程序运行过程中其值可以发生改变的量称为变量。

        在golang中有三种定义变量的方式,分别为"声明变量","变量赋值",“自动推导类型”。
            (1)声明变量语法格式:
                var 变量名称 数据类型
            (2)变量赋值语法格式:
                var 变量名称 数据类型 = 值
            (3)自动推导类型(根据值的类型确定变量名的类型)语法格式:
                变量名 := 值
    */

    //1>.声明变量
    var name string
    name = "Jason Yin"
    fmt.Println(name)
    fmt.Printf("变量name的数据类型是:%T
", name)

    //2>.变量赋值
    var age int = 18
    fmt.Println(age)
    fmt.Printf("变量age的数据类型是:%T
", age)

    //3>.自动推导类型
    blog := "https://www.cnblogs.com/yinzhengjie/"
    fmt.Println(blog)
    fmt.Printf("变量blog的数据类型是:%T
", blog)
}

Golang的变量定义及使用案例第1张

二.变量的多重赋值

package main

import "fmt"

func main() {

    name := "Jason Yin"
    age := 18
    blog := "https://www.cnblogs.com/yinzhengjie/"

    fmt.Printf("变量name的数据类型是:%T,其对应的值是:%s
", name, name)
    fmt.Printf("变量age的数据类型是:%T,其对应的值是:%d
", age, age)
    fmt.Printf("变量blog的数据类型是:%T,其对应的值是:%s
", blog, blog)

    fmt.Println("**********我是分割线**********")

    /*
        上面的name,age,blog使用三行代码进行自动推导类型赋值,但是写起来相对来说比较复杂。

        我们可以使用多重赋值的方式进行赋值,只需要一行就可以搞定,语法格式如下:
            变量名称1,变量名称2,变量名称3[,...,变量名称n] := 对应变量名称1的值,对应变量名称2的值,对应变量名称3的值[,...,对应变量名称n的值]
    */
    name2, age2, blog2 := "尹正杰", 27, "https://www.cnblogs.com/yinzhengjie2020"
    fmt.Printf("变量name2的数据类型是:%T,其对应的值是:%s
", name2, name2)
    fmt.Printf("变量age2的数据类型是:%T,其对应的值是:%d
", age2, age2)
    fmt.Printf("变量blog2的数据类型是:%T,其对应的值是:%s
", blog2, blog2)

}

Golang的变量定义及使用案例第2张

三.小试牛刀

  练习一:
    圆周率为3.14,变量为4.115,请计算圆的周长和面积。

  练习二:
    变量x的值为10,变量y的值为20,请将两个变量的值进行互换,最少写出两种思路。
package main

import (
    "fmt"
)

func main() {
    PI := 3.14
    r := 4.115
    fmt.Printf("变量PI的数据类型是:%T
", PI)
    fmt.Printf("变量r的数据类型是:%T
", r)
    //圆的的面积
    s := PI * r * r

    //圆的周长
    l := PI * 2 * r

    /*
        带小数的数据类型称为浮点数,浮点数分为单精度浮点型(float32)和双精度浮点型(float64):
            单精度浮点型(float32):
                小数点默认保留6位
            双精度浮点型(float64)
                小数点默认保留15位

        关于浮点数的知识扫描,博主推荐阅读:
            https://www.cnblogs.com/yinzhengjie2020/p/12247502.html
    */
    fmt.Println("圆的面积:", s)
    fmt.Println("圆的周长:", l)

    fmt.Printf("%.2f
", l) //保留2位有效数字
    fmt.Printf("%.5f
", l) //保留5位有效数字
}
package main

import (
    "fmt"
)

func main() {
    x := 10
    y := 20

    fmt.Printf("变量未发生交换之前,x的值为[%d],y的值为[%d]
", x, y)

    /*
        思路:
            引入第三方变量temp来交换变量的值。
        优点:
            通俗易懂,生产环境中建议使用这种方式。
        缺点:
            多引入了一个变量,会占用内存。
    */
    temp := x
    x = y
    y = temp

    fmt.Printf("变量发生交换之后,x的值为[%d],y的值为[%d]
", x, y)
}
package main

import (
    "fmt"
)

func main() {
    x := 10
    y := 20

    fmt.Printf("变量未发生交换之前,x的值为[%d],y的值为[%d]
", x, y)

    /*
        思路:
            使用加法("+")和减法("-")运算符来交换变量的值。
        优点:
            没有引入任何新的变量就完成了变量值的互换。
        缺点:
            当x和y的值足够大时,容易超出x和y的数值范围哟~
    */
    x = x + y
    y = x - y
    x = x - y

    fmt.Printf("变量发生交换之后,x的值为[%d],y的值为[%d]
", x, y)
}
package main

import (
    "fmt"
)

func main() {
    x := 10
    y := 20

    fmt.Printf("变量未发生交换之前,x的值为[%d],y的值为[%d]
", x, y)

    /*
        思路:
            使用异或("^")运算符来交换变量的值。
        优点:
            没有引入任何新的变量就完成了变量值的互换,效率非常高,推荐在面试的时候使用这种写法,可以提高逼格~
        缺点:
            可读性较差,不易于读者理解,生产环境中不推荐使用这种方式实现。
    */
    x = x ^ y
    y = x ^ y
    x = x ^ y

    fmt.Printf("变量发生交换之后,x的值为[%d],y的值为[%d]
", x, y)
}
package main

import (
    "fmt"
)

func main() {
    x := 10
    y := 20

    fmt.Printf("变量未发生交换之前,x的值为[%d],y的值为[%d]
", x, y)

    /*
        思路:
            使用多重赋值交换两个变量的值
        优点:
            没有引入任何新的变量和运算符就实现了变量值的互换,效率非常高,生产环境中推荐这种写法。
        缺点:
            暂无
    */
    x, y = y, x

    fmt.Printf("变量发生交换之后,x的值为[%d],y的值为[%d]
", x, y)
}