• 初识Go(1)


    1.变量的定义:
    var VarName Type
    var vname1, vname2, vname3 type
    var variableName type = value
    var vname1, vname2, vname3 type= v1, v2, v3
    var vname1, vname2, vname3 = v1, v2, v3
    vname1, vname2, vname3 := v1, v2, v3 (适用于函数内部)
    _, b := 34, 35  缺省定义.
    
    2.常量
    const constantName = value
    const Pi float32 = 3.1415926
    
    3.布尔型
    var isActive bool // 全局变量声明
    var enabled, disabled = true, false // 忽略类型的声明
    
    4.在 Go 中字符串是不可变的,例如下面的代码编译时会报错:
    var s string = "hello"
    s[0] = 'c'
    
    如果要修改:
    s := "hello"
    c := []byte(s) // 将字符串 s 转换为 []byte 类型
    c[0] = 'c'
    s2 := string(c) // 再转换回 string 类型
    fmt.Printf("%s
    ", s2)
    
    5.字符串连接
    s := "hello,"
    m := " world"
    a := s + m
    fmt.Printf("%s
    ", a)
    
    6.声明一个多行的字符串:
    m := `hello
    world`  
    
    7.声明错误
    err := errors.New("emit macho dwarf: elf header corrupted")
    if err != nil {
    fmt.Print(err)
    }
    
    8.分组,除非被显式的赋值,否则每个iota的第一个值为0,第二以及后续的常量被默认设置为他前面的值
    import(
    "fmt"
    "os"
    )
    const(
    i = 100
    pi = 3.1415
    prefix = "Go_"
    )
    var(
    i int
    pi float32
    prefix string
    )
    
    9.enum,iota枚举
    const(
    x = iota // x == 0
    y = iota // y == 1
    z = iota // z == 2
    w // 常量声明省略值时,默认和之前一个值的字面相同。这里隐式地说 w =
    iota,因此 w == 3。其实上面 y 和 z 可同样不用"= iota"
    )
    10.Go中的一些规则
    大写字母开头的变量是可导出的,也就是其它包可以读取的,是公用变量;小写字
    母开头的就是不可导出的,是私有变量。
    大写字母开头的函数也是一样,相当于 class 中的带 public 关键词的公有函数;小
    写字母开头的就是有 private 关键词的私有函数。
    
    11.array
    var array [n]type    array:=[n]type{"n","m",^^^^}
    由于长度也是数组类型的一部分,因此[3]int 与[4]int 是不同的类型,数组也就不能改变长
    度。数组之间的赋值是值的赋值,即当把一个数组作为参数传入函数的时候,传入的其实是
    该数组的副本,而不是它的指针。
    var array [3]int
    array[0] = 1
    array := [...]{1,2,3,4,5} 省略长度,根据元素个数自动计算长度
    
    12.slice
    slice 并不是真正意义上的动态数组,而是一个引用类型。slice 总是指向一个底层
    array,slice 的声明也可以像 array 一样,只是不需要长度。
    
    var fslice []int
    slice := []byte {'a', 'b', 'c', 'd'}
    排序:
    import "sort"
    sort.Ints(slice)
    sort.Strings(slice)
    sort.Float64(slice)
    如果待排序数据个数比少,内部使用插入排序,待排序数据个数大于某个值时使用堆排序,否则使用快速排序。 slice 的默认开始位置是 0,ar[:n]等价于 ar[0:n] • slice 的第二个序列默认是数组的长度,ar[n:]等价于 ar[n:len(ar)] • 如果从一个数组里面直接获取 slice,可以这样 ar[:],因为默认第一个序列是 0,第 二个是数组的长度,即等价于 ar[0:len(ar)] 对于 slice 有几个有用的内置函数: • len 获取 slice 的长度 • cap 获取 slice 的最大容量 • append 向 slice 里面追加一个或者多个元素,然后返回一个和 slice 一样类型的 slice • copy 函数 copy 从源 slice 的 src 中复制元素到目标 dst,并且返回复制的元素的个 数 13.map map 也就是 Python 中字典的概念,它的格式为 map[keyType]valueType 声明一个 key 是字符串,值为 int 的字典,这种方式的声明需要在使用之前使用 make 初始化 var numbers map[string] int // 另一种 map 的声明方式 numbers := make(map[string]int) numbers["one"] = 1 //赋值 numbers["ten"] = 10 //赋值 numbers["three"] = 3 使用 map 过程中需要注意的几点: • map 是无序的,每次打印出来的 map 都会不一样,它不能通过 index 获取,而必须 通过 key 获取 • map 的长度是不固定的,也就是和 slice 一样,也是一种引用类型 • 内置的 len 函数同样适用于 map,返回 map 拥有的 key 的数量 • map 的值可以很方便的修改,通过 numbers["one"]=11 可以很容易的把 key 为 one 的字典值改为 11 // 初始化一个字典 rating := map[string]float32 {"C":5, "Go":4.5, "Python":4.5, "C++":2 } // map 有两个返回值,第二个返回值,如果不存在 key,那么 ok 为 false,如果存在 ok 为 true csharpRating, ok := rating["C#"] if ok { fmt.Println("C# is in the map and its rating is ", csharpRating) } else { fmt.Println("We have no rating associated with C# in the map") } delete(rating, "C") // 删除 key 为 C 的元素

      

  • 相关阅读:
    Mybatis 学习过程中出现空指针异常的错误【已解决】
    IntelliJ IDEA的常用设置及快捷键
    The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone错误的解决办法【已解决】
    IntelliJ IDEA安装教程及使用方法
    OA项目笔记
    Linux常用命令大全(四)
    Linux常用命令大全(三)
    Linux常用命令大全(二)
    Linux常用命令大全(一)
    Apache配置默认首页
  • 原文地址:https://www.cnblogs.com/huangxiaohen/p/4180037.html
Copyright © 2020-2023  润新知