zoukankan      html  css  js  c++  java
  • go语言学习笔记

    Go语言学习
    基本类型
    Bool 取值范围:true,false (不可以用数字代替)
    Int/uint 根据平台可能为32或64位
    int8/uint8 长度:1字节 取值范围-128~127/0~255
    byte(uint8别名)
    int16/uint16 int32/uint32 int62/uint64
    float32/float64 长度:4/8字节 小数位:精确到7/15小数位
    复数:complex64/complex128 长度:8/16字节 足够保存指针的32位或64位整数型
    零值是变量的默认值


    在submit里面ctrl+b是打开我们的测试窗口,go run 是运行程序

    Go语言中只能显示转换<valueA> [:]=<TypeOfValueA>(<ValueB>)
    浮点型和布尔型不能进行转换
    string转换为int类型 var valueA, _ = strconv.Atoi(ValueB)
    Int类型转换为string类型 valueA:= strconv.Itoa(ValueB)

    1. #string到int  
    2. int,err:=strconv.Atoi(string)  
    3. #string到int64  
    4. int64, err := strconv.ParseInt(string, 10, 64)  
    5. #int到string  
    6. string:=strconv.Itoa(int)  
    7. #int64到string  
    8. string:=strconv.FormatInt(int64,10)  


    Go中有指针
    采用”.”选择符来操作指针目标对象的成员
    操作符”&”取变量地址,使用”*”通过指针间接访问目标对象
    默认值为nil不是null

    If语句中大括号必须跟在条件语句后面,条件语句可以没有括号,可以在条件语句中可以声明变量

    For语句 for{} 无限循环 for i:=0;i<3;i++ {} 经典模式

    Switch 支持任何类型或表达式的条件语句,不需要break,符合条件自动跳出,如需要继续执行下一个case,需要使用fallthrough语句,支持初始化表达式,右侧需跟分号,做大括号必须和条件语句在同一行。

    Goto break和continue会与标签结合使用,否则break只会跳出本次循环


    数组 var a [2]int //长度为2的int型数组
    没有赋值,则默认的值为零;string默认为空
    a :=[2]int{1} //数组的第一个数为1,第二个为默认0
    a :=[20]int{19:1} //添加索引,第二十个元素为0,其他为0
    a :=[…]int{1,2,3,4,5} //长度为5的数组
    a :=[…]int{19:1} //索引20元素为1,其他为零,数组长度为20

    数组指针 a := […]int{19:1}
    Var p *[100]int= &a //p位数组a的地址
    指针数组 x,y=1,2
    a:=[…]int{&x,&y} //a输出的是x,y的地址
    数组之间可以进行==和!=的比较

    切片Slice
    本身不是数组,它指向底层的数组
    可以直接创建或从底层数组获取生成
    len()获取元素个数,cap()获取容量,make()创建,如果多个slice指向相同底层数组,其中一个的值改变会影响全部
    make([]T,len,cap) 如果cap省略,则和len的值相同

    var a=[]int //切片的定义

    a:=[10]int
    s1:=a[5:] //切片s1取数组a索引5到最后的元素
    s1:=a[:5]//s1取数组a索引0到5的元素
    s1:=a[3:9] //s1取数组a索引3到9的元素

    s1 :=make([]int,3,6) //定义s1切片,长度为3,容量为6
    s1=append(s1,1,2,3) //利用append函数为切片s1追加元素1.2.3


    map
    var m map[int]string //map定义
    m=make(map[intstring]) //初始化
    m[1]=”ok” //赋值
    a :=m[1] //取值
    delete(m,1) //删除值

    多重map嵌套,需要第二层的进行初始化
    var m map[int]map[int]string
    m=make(map[int]map[int]string)
    m[1]=make(map[int]string) //对于key为1 进行初始化
    m[1][1]=”ok”
    a:=m[]

    range 迭代函数
    sort.Ints(s) 排序

    对map的间接排序
    m :=map[int]string{1:”a”,2:”b”,3:”c”,4:”d”,5:”e”} //建map
    s:=make([]int,len(m))//建slice
    i:=0
    for k,_:=range m{ //迭代取出每一个key的值,存到slice中
    s[i]=k
    i++
    }
    Sort.Ints(s) //对slice排序


    Go 函数 不支持 嵌套、重载和默认参数
    无需声明原型、不定长度变参、多返回值、命名返回值参数
    匿名函数、闭包
    defer
    在函数体执行结束后
    按照调用顺序的相反顺序逐个执行
    即使函数发生严重错误也会执行
    支持匿名函数的调用
    常用于资源清理、文件关闭、解锁以及记录时间等操作
    通过与匿名函数配合可在return之后修改函数计算结果
    如果函数体内某个变量作为defer时匿名函数的参数,则在定义defer
    时即已经获得了拷贝,否则则是引用某个变量的地址
    Go 没有异常机制,但有 panic/recover 模式来处理错误
    Panic 可以在任何地方引发,但recover只有在defer调用的函数中有效

    结构体
    Go 中的struct与C中的struct非常相似,并且Go没有class
    使用 type <Name> struct{} 定义结构,名称遵循可见性规则
    支持指向自身的指针类型成员
    支持匿名结构,可用作成员或定义成员变量
    匿名结构也可以用于map的值
    可以使用字面值对结构进行初始化
    允许直接通过指针来读写结构成员
    相同类型的成员可进行直接拷贝赋值
    支持 == 与 !=比较运算符,但不支持 > 或 <
    支持匿名字段,本质上是定义了以某个类型名为名称的字段
    嵌入结构作为匿名字段看起来像继承,但不是继承
    可以使用匿名字段指针

  • 相关阅读:
    python 报错:reduce failed to synchronize: device-side assert triggered
    pytorch 分割二分类的两种形式
    Leetcode 104. 二叉树的最大深度
    LeetCode 78. 子集
    python报错:1only batches of spatial targets supported (non-empty 3D tensors) but got targets of size
    PyTorch:The "freeze_support()" line can be omitted if the program is not going to be frozen
    pytorch创建tensor的四种方法
    Leetcode 四数之和
    C++的类和对象
    结构体
  • 原文地址:https://www.cnblogs.com/LiLiliang/p/5523217.html
Copyright © 2011-2022 走看看