Go学习笔记(十)基础遗漏整理。

来源:互联网 发布:淘宝看不到自己的评价 编辑:程序博客网 时间:2024/06/08 07:45

1 导包可以加入别名
import std “fmt” 之后程序可以调用 std. 代替fmt。这样会防止包名重复。
2 数据类型 byte(等同于uint8) rune(等于int32)
3“strconv”包下 int=》string;string=》int;

    //int=》string    strconv.Itoa(a)     //string=》int    strconv.Atoi(b)

4常量用 const 声明。 大写
5运算符:&^

/*    6: 0110    11:1011    ------- &^    0100   (如果下面的位数是1则需要强行改成0,否则不对第一个书进行操作)    */

6 循环:标签和goto结合使用,标签放在goto语句后面避免死循环。
7. 数组:

a := [20]int[19:1] //(即将索引为19的赋值为1)

数组可以进行比较 ==或者!= 需要类型和长度相同才能进行比较。

8.冒泡排序

// BubbleSort project 冒泡排序package mainimport (    "fmt")func main() {    //数组定义是大括号,    a := [5]int{5, 2, 6, 3, 9}    fmt.Println(a)    lenth := len(a)    for i := 0; i < lenth; i++ {        for j := i + 1; j < lenth; j++ {            if a[i] < a[j] {                temp := a[i]                a[i] = a[j]                a[j] = temp            }        }    }    fmt.Println(a)}

9. Slice切片:copy(s1,s2)以长度短的为准。append追加切片,长度超过,重新分配内存地址。切片取数组中的一部分如果长度不超过,修改其中一个数组,取出来的数值也会变。
10. map嵌套map时需要每一层map都要初始化。
for i,v:=rang slice{} //i 是索引或者key

11 函数function

func A() (int,int,int){  //第二个小括号内是返回类型}func B(B ... int){  //不定长变参必须是最后一个参数。}
  • 如果传递的是slice类型的在函数内部修改slice的,外部的slice 也被修改了。如果传入的是int,string 等这种值传递不影响外部。如果传递指针类型的话,就改变原始值。
    闭包的作用是:返回一个匿名函数
    • defer 后定义的先调用,逆序向上调用
    • 没有异常机制,有Panic/recover模式来处理错误。
    • Panic可以在任何地方引发,但是recover只有在defer调用的函数中有效;Panic运行之后之后就不运行了。defer func(){ recover}放在Panic之前。
package mainimport (    "fmt")func main() {    A()    B()    C()}func A() {    fmt.Println("func  a")}func B() {    defer func() {        if err := recover(); err != nil {            fmt.Println("recover in b")        }    }()    panic("func  b")}func C() {    fmt.Println("func  c")}

匿名结构

    a := &struct {   //取地址        Name string        Age  int    }{        Name: "hif",        Age:  10,    }

匿名字段

  type nimingstring struct {    string    int    }    //初始化的时候必需对应I    s := nimingstring{"sad", 1}

组合结构(结构的嵌入)

  type human struct {    Sex int}type teacher struct {    human    Name string    Age  int}type student struct {    human    Name string    Age  int}    //初始化    t := teacher{Name: "as", Age: 2, human: human{Sex: 1}}    st := student{Name: "aasasasas", Age: 22, human: human{Sex: 0}}    t.Sex = 1

可能遇到的问题

  • 导包 尽量写绝对路径
  • slice特性是指向地址。但是写方法对slice进行处理,为了避免指向地址变了,写上返回值。
  • time包。自定义时间类型,Format(常量或者api内部类型(全复制))。禁止修改,会影响结果。
  • for range和闭包的坑:不作为参数传递的都是引用地址的传递。需要作为参数传递(进行值拷贝传递)。

在线网站:

  • github基础学习代码连接
  • go步行者(暂测打不开)
  • Go学习基础视频(无闻)

疑问? 闭包的概念

原创粉丝点击