go语言之变量

1、go的hello world

package main
//申明开头,表示代码所属包,申明为main包,可以编译为二进制程序
import (
   "fmt"
)
//导入格式化包,如果引入了包,则必须要用,不然会报错,主要为提高效率,追求极致

func main() {
   fmt.Println("Hello, World!")
}
//左边的大括号不能自己单独启一行,右边的大括号不影响


//单行注释
/*
duo多行zhus注释
 */


 //go区分大小写
 //go的变量名以下划线和字母开头

  

2、go的变量申明

package main

import "fmt"
func main() {

        //申明变量
        var v1 int
        var v2 int

        var v3,v4 int

        var (
                v5 int
                v6 int
        )

        //默认都是零值
        fmt.Println(v1,v2,v3,v4,v5,v6)
}

  

3、go变量的初始化

package main

import (
        "fmt"
        "reflect"
)
func main() {
        //初始化变量

        //方式1
        var v1 int = 10

        //方式2
        var v2 = 20

        //方式3
        v3 := 30

        fmt.Println(v1,v2,v3)
        fmt.Println("v3的类型为",reflect.TypeOf(v3))
        //利用反射查看v3的类型
}

  

package main

import "fmt"
func main() {
        //直接赋值
        var v1 int
        v1 = 10

        //申明并赋值,这种方式只能在函数里用
        v2 := 20
        v3 := 30

        //多重赋值
        var v4,v5,v6 int
        v4,v5,v6 = 40,50,50

        fmt.Println(v1,v2,v3,v4,v5,v6)

}

  

4、go变量的赋值

package main

import "fmt"
func main() {
        //直接赋值
        var v1 int
        v1 = 10

        //申明并赋值
        v2 := 20
        v3 := 30

        //多重赋值
        var v4,v5,v6 int
        v4,v5,v6 = 40,50,50

        fmt.Println(v1,v2,v3,v4,v5,v6)

}

  

5、匿名变量

package main

import "fmt"

//(int,string),函数的返回值是2个,一个是int一个是字符串
func test() (int,string) {
        return 444,"golang"
}

func main() {
        //i, s := test()
        //fmt.Println(i,s)

        //test函数返回两个,在golang中,如果变量没有被使用,则会飘红,这里如果我们只用第二个变量,则可以用一个下划线来做匿名变量
        //主要用来占位,这样,这个变量就算没有被使用,代码也不会飘红
        _, s := test()
        fmt.Println(s)
}

  

6、常量和枚举

package main

import "fmt"

//定义常量,必须要给一个确定的值,可确定的值比如 数字,字符串,布尔值
const filename  = "chy.text"

//这样就会报错,因为a是一个变量,不是一个确定的值
//var a string
//a = "abc"
//const testname  = a

func a()  {
        const (
                v1 = "aaa"
                v2 = "bbb"
                filename  = "chr.text"
        )

        //就近原则
        fmt.Println(filename)
}
func b()  {

        //定义普通的枚举类型
        const (
                python = "aaa"
                java = "bbb"
                perl = "ccc"
        )
        fmt.Println(python,java,perl)
}

func c()  {
        //定义自增的枚举类型
        //iota代表自增,从0开始,也叫做常量生成器
        const (
                test1 = iota
                test2
                test3
        )
        fmt.Println(test1,test2,test3)
}

func d()  {
        //iota还可以参与计算,下面的例子是位运算
        const (

                b = 1 << (10*iota)
                //1 * 2 ^ (10 * iota)
                
                kb
                mk
                gb
                //tb
                //pb
        )
        fmt.Println(b,kb,mk,gb)
}

func main() {
        //a()
        //b()
        //c()
        d()
}

  

复习代码

package main

import "fmt"


//定义一个函数,接受2个参数,参数1位int类型的a,参数为string类型的b
//函数返回两个值,其中第一个值为int类型,第二个值为string类型
func test1_1(a int,b string) (int,string) {
        return a + 100,b + "abc"
}

func test1_2()  {
        const (
                a = iota
                b = iota
                c = iota
                d = iota
        )

        //下面这种写法和上面的写法的结果是一样的
        //const (
        //      a = iota
        //      b
        //      c
        //      d
        //)
        
        fmt.Println(a,b,c,d)
        //0 1 2 3
}



func test1_3()  {
        const (
                a = iota    //此时iota为0,也就是a=0
                b = 100     //此时iota为1,但是b=100
                c = 200     //此时iota为2,但是c=200
                d           //此时iota为3,但是d=200,和上一行的值保持一致
                e           //此时iota为4,但是e=200,和上一行的值保持一致
                f = iota    //此时iota为5,f=5
        )
        fmt.Println(a,b,c,d,e,f)
        //0 100 200 200 200 5
}


func main(){
        //1、申明一个int类型的变量
        var test_1_a int
        var test_1_b int
        var test_1_c,test_1_d int
        var (
                test_1_e int
                test_1_f int
        )
        fmt.Println(test_1_a,test_1_b,test_1_c,test_1_d,test_1_e,test_1_f)

        //如果没有对int类型的变量赋值,那么这个int类型的变量为0
        //0 0 0 0 0 0


        //2、对变量进行赋值的三种方法
        var test_1_1 int = 1

        var test_1_2 = 2
        test_1_3 := 3

        fmt.Println(test_1_1,test_1_2,test_1_3)
        //1 2 3


        //此时这里的_就是匿名变量
        _,res_a := test1_1(122,"dddd")
        fmt.Println(res_a)
        //ddddabc



        c,d :=test1_1(1,"abc")
        fmt.Println(c,d)
        
        //定义一个常量,这个常量不能被赋值为一个变量,因为变量是会变的,常量是不能变的
        const filename  =  "test1.go"

        test1_2()

        test1_3()

}