zoukankan      html  css  js  c++  java
  • DAY 99 go03

    1 函数 
    -func 函数名(参数 类型,参数 类型)(返回值类型){}
       
    2 参数可以是函数类型,返回值是函数类型
    -函数的参数和返回值都是类型的一部分
    3 闭包函数---》go中函数是一等公民,头等函数
    4 类名重命名
    5 if   else if else
    6 循环:for
    7 switch

     

    1 数组

    package main

    import "fmt"

    // 数组:数组是同一类型元素的集合。例如,整数集合 5,8,9,79,76 形成一个数组。连续存储
    //Go 语言中不允许混合不同类型的元素,例如包含字符串和整数的数组

    func main() {

    // 1 定义数组
    //var a [4]int
    //fmt.Println(a)

    //2 定义并初始化
    //var a [3]int=[3]int{3,3}
    //var a =[3]int{3,3,3}
    //a :=[30]int{3,3,3,3,4,54,}
    //fmt.Println(a)

    //3 定义,使用
    //var a [3]string
    //var a [3]bool
    //a[0]=true  // 根据索引取值,从0开始,没有负数
    ////a[-1]=true // 错误
    ////a[3]=true  //不能超过索引范围
    //fmt.Println(a)
    //b :=a[2]
    //fmt.Println(a[2])
    //fmt.Println(b)

    //4 数组是值类型(当做参数传递,在函数中修改,会不会影响原来的数组:不会)
    // 值类型,当做参数传递,是copy一份,传递过去
    //var a =[3]int{3,3,3}
    //test(a)
    //fmt.Println("原来的",a)

    // 5 数组长度(数组的长度在定义阶段就固定了,以后不能改)
    //var a =[3]int{3,3,3}
    //fmt.Println(len(a))  // 内置函数len


    // 6 循环数组(两种方式)
    //var a =[3]int{3,3,3}
    // 按索引取
    //for i:=0;i<len(a);i++ {
    // fmt.Println(a[i])
    //}


    // 按迭代取值  rang是关键字,后面放可迭代的值,会返回两个值,第一个值是索引,第二个值是值
    //如果只用一个值接收,就是索引
    //for i,v:=range a{
    //for _,v:=range a{
    // //fmt.Println("索引是:",i)
    // fmt.Println("z值:",v)
    //}


    // 多维数组
    //var a [3][3]int  //定义
    //
    //fmt.Println(a)
    ////b:=a[0]
    ////var b [3]int=a[0]
    //fmt.Println(a[0])
    //a[1][2]=99
    //fmt.Println(a)
    //
    ////多维数组的循环
    //for _,v:=range a{
    // for _,v1:=range v{
    // fmt.Println(v1)
    // }
    //}

    // 多维数组定义并初始化
    //var a [3][3]int=[3][3]int{{1,1},{2,3,4},{6,6,6}}
    //fmt.Println(a)

    // 数组定义并初始化
    //var a [3]int=[3]int{0,0,99}
    //指定某个位置初始化
    //var a [300]int=[300]int{299:99,88:1001}
    //fmt.Println(a)
    }
    func test(a [3]int) {
    a[0]=999
    fmt.Println(a)
    }

     

    2 切片

    package main

    import "fmt"

    // 切片(用的非常广泛,类比python中的列表,类比java中的list:arrylist,linkedlist)

    //切片是由数组建立的一种方便、灵活且功能强大的包装,【切片本身不拥有任何数据。它们只是对现有数组的引用】

    func main() {
    //1 定义切片
    //定义数组
    //var a [10]int=[10]int{1,2,3,4,5,6,7,8,9,10}
    ////定义切片(中括号中不写东西,表示切片类型,写了东西表示数组类型)
    //var s []int=a[:]
    ////var s =a[0:10]  //从数组的第0个位置切到最后,做成s切片
    ////s :=a[0:10]  //从数组的第0个位置切到最后,做成s切片
    ////fmt.Printf("%T",s)
    //fmt.Println(s)
    //s[0]=999
    //fmt.Println(s)
    ////a变成了什么样子:切片的更改会影响底层数组,数组的更改会影响切片
    //fmt.Println(a)
    //a[9]=888
    //fmt.Println(a)
    //fmt.Println(s)

    // 2 从数组中切出切片
    //var a [10]int=[10]int{1,2,3,4,5,6,7,8,9,10}
    //var s []int=a[5:]  //从第5个位置切到最后
    //
    //s[0]=999
    //fmt.Println(s)
    //fmt.Println(a)
    //a[7]=777
    //fmt.Println(s)
    //fmt.Println(a)

    //3 从数组中切出切片
    //var a [10]int=[10]int{1,2,3,4,5,6,7,8,9,10}
    //var s []int=a[5:8]  //从第5个位置切到8,前闭后开,[6,7,8]
    ////fmt.Println(s)
    //a[8]=999
    //fmt.Println(s)
    //fmt.Println(a)

    //4 切片的追加值
    //var a [10]int=[10]int{1,2,3,4,5,6,7,8,9,10}
    //var s []int=a[5:8]  //从第5个位置切到8,前闭后开,[6,7,8]
    //fmt.Println(s)
    //a[8]=999
    ////使用内置函数append
    ////s=append(s,777)
    ////s=append(s,888)
    //fmt.Println(s)
    //fmt.Println(a)

    //5 切片底层存储
    //{point:指向数组的指针,length:3,可用数组的长度(容量):5}
    //6 切片的长度和容量
    //fmt.Println("长度是:",len(s))
    //fmt.Println("容量:",cap(s))  //内置函数cap

    //6 如果追加到最大容量会?
    //var a [10]int=[10]int{1,2,3,4,5,6,7,8,9,10}
    //var s []int=a[5:8]  //从第5个位置切到8,前闭后开,[6,7,8]
    //s=append(s,88)
    //s=append(s,99)
    //fmt.Println("长度是:",len(s))
    //fmt.Println("容量:",cap(s))  //内置函数cap
    //fmt.Println("数组是:",a)
    //fmt.Println("切片是",s)
    //
    ////超过最大容量
    //s=append(s,666)
    //fmt.Println("长度是:",len(s)) //6
    //fmt.Println("容量:",cap(s))  //10  如果超过最大容量,会重新申请一个底层数组(大小是原来切片容量的两倍),把值copy进去,跟原来指向的数组无关了
    //fmt.Println("数组是:",a)    //1 2 3 4 5 6 7 8 88 99
    //fmt.Println("切片是",s)//6 7 8 88 99 666
    //
    //// 跟原来数组无关了
    //s[0]=111
    //fmt.Println("数组是:",a)    //1 2 3 4 5 6 7 8 88 99
    //fmt.Println("切片是",s)//6 7 8 88 99 666
    //
    ////7 切片的修改,按照索引修改
    //s[6]=99999  //报错,修改只能改长度内的,跟容量无关,如果超了长度,报错

    //8 通过make来创建切片
    //指定类型,指定长度,指定容量(容量可以不写,容量就是长度)
    //var a []int= make([]int,3,5)
    //var a []int= make([]int,3)
    //fmt.Println(len(a))
    //fmt.Println(cap(a))
    //a=append(a,6)
    //fmt.Println(len(a))
    //fmt.Println(cap(a))
    //a=append(a,7)
    //a=append(a,8)
    //a=append(a,9)
    //fmt.Println(len(a))
    //fmt.Println(cap(a))

    // 9 初始化的三种方式
    //var a []int= make([]int,3)  //对切片进行初始化
    //var a []int //切片类型的零值  nil,是指针类型的0值
    //if a==nil{
    //fmt.Println("wos k")
    //}
    //fmt.Println(a)
    //var a []int=[]int{1,2,3,4,4}  //对切片进行初始化
    //fmt.Println(a)
    //fmt.Println(len(a))
    //fmt.Println(cap(a))

    //10 切片参数传递:切片是引用类型,传到函数中,修改会影响原来的
    //var a []int=[]int{1,2,3,4,4}
    //fmt.Println(len(a))
    //fmt.Println(cap(a))
    //test2(a) // copy传递
    //
    //fmt.Println("切片的值为:",a)

    //11 多维切片
    //var a [][]int=make([][]int,3,5)
    //
    ////fmt.Println(a[1])
    ////print(a[1][1]) //在这报错
    //a[1]=make([]int,3,3)
    //print(a[1][1])

    //var a [][]int=[][]int{{1,2,3,4},{1,2},{6,6,6,6}}
    //fmt.Println(a[2])
    //fmt.Println(len(a[1]))
    //fmt.Println(cap(a[1]))
    ////循环切片
    //for _,v:=range a{
    //for _,v1:=range v{
    //fmt.Println(v1)
    // }
    //}
    //var a []func()=make([]func(),3,3)
    //a[0]= func() {
    //fmt.Println("xxxx")
    //}
    //a[1]= func() {
    //
    //}


    //12 内存优化(copy)
    //var a [1000]int
    //b:=a[0:3]  //[0,0,0]
    //b[0]=999
    //b[2]=888 //[999,0,888]
    //
    ////var dst=make([]int,2,3)
    //var dst=make([]int,6,6)
    //fmt.Println(dst)
    //copy(dst,b)
    //fmt.Println(dst)  //[999,0]


    }
    func test2(a []int) {
    a[0]=999
    a=append(a,888) // 如果在函数中追加正巧超过切片的容量,再改值,跟原来就没关系了

    fmt.Println(a)

    }

     

     

    4 maps

    package main

    import "fmt"

    //maps:类似于字典,   key:valu存储方式

    func main() {
    // 1 定义map,key值必须可hash,用的最多就是数字和字符串
    //var a map[int]string
    //fmt.Println(a)
    //if a==nil{
    // fmt.Println("我是空的")
    //}
    ////2 赋值,取值
    //a[1]="lqz" // 没有初始化,报错

    // 3 初始化   使用make初始化map时,不需要传数字
    //var a map[int]string=make(map[int]string)
    //fmt.Println(a)
    ////赋值
    //a[1]="lqz"
    //a[99]="egon"
    //
    //fmt.Println(a)
    //fmt.Println(a[1])

    //4 取不存在的值,得到value值的空值
    //var a map[int]string=make(map[int]string)
    //a[1]="lqz"
    //fmt.Println(a[99])  //空,value值的空

    //var a map[int]int=make(map[int]int)
    //fmt.Println(a[9])  // value值的空值,0
    //var a map[int][]int=make( map[int][]int)
    //fmt.Println(a[1])  //value值的空值 []-->nil
    //if a[1]==nil{
    // fmt.Println("是nil")
    //}


    //var a map[int]int=make(map[int]int)
    ////var res int=a[0]
    //a[0]=999
    //v,ok :=a[0]   //如果能取到,v就是value值,ok是true     如果娶不到v是value的空值,ok是false
    //fmt.Println(v)
    //fmt.Println(ok)


    //5 删除map中的元素
    //var a map[int]string= map[int]string{1:"egon",4:"lqz",7:"zs"}
    //fmt.Println(a)
    //fmt.Println(a[4])
    //delete(a,5)  //如果存在就删除,不存在就不操作,不报错
    //delete(a,4)
    //fmt.Println(a)

    //6 获取map长度
    //var a map[int]string= map[int]string{1:"egon",4:"lqz",7:"zs"}
    //fmt.Println(len(a))
    //a[9]="ssss"
    //fmt.Println(len(a))
    ////map有没有容量?看不到容量----》hash类型的底层存储--》基于数组存储
    ////fmt.Println(cap(a))

    // 7 map是引用类型,当参数传递,影响原来的
    //var a map[int]string= map[int]string{1:"egon",4:"lqz",7:"zs"}
    //test5(a)
    //fmt.Println(a)

    // 8 map的相等性,只能跟nil比较
    //if a ==nil{
    // fmt.Println("为空")
    //}else {
    // fmt.Println("不为空")
    //}
    //var b map[int]string= map[int]string{1:"egon",4:"lqz",7:"zs"}
    //if a==b{  //不能这么比较
    //
    //}

    //9 类型
    //var a []map[int]int=make([]map[int]int,3)
    //var b map[string][]int
    //var c map[string]map[int]int




    //10 数组的大小是类型的一部分
    //var a [3]map[int]int
    //var b [4]int
    //if a==b{}






    }
    func test5(a map[int]string) {
    a[1]="利用衣服"
    fmt.Println(a)

    }
  • 相关阅读:
    MFC tab页面中获到其它页面的数据
    sqlite数据库中"Select * From XXX能查到数据,但是Select DISTINCT group From xxx Order By group却查不出来
    关闭程序出现崩溃(exe 已触发了一个断点及未加载ucrtbased.pdb)
    springboot 通用Mapper使用
    springBoot 发布war包
    springCloud Zuul网关
    springboot hystrix turbine 聚合监控
    springBoot Feign Hystrix Dashboard
    springBoot Ribbon Hystrix Dashboard
    springBoot Feign Hystrix
  • 原文地址:https://www.cnblogs.com/DEJAVU888/p/14894234.html
Copyright © 2011-2022 走看看