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

本文介绍Go语言的基础知识,包括导包、数据类型、字符串转换、常量声明等内容,并讲解了数组、切片、映射(map)及结构体的使用方法。

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 main

import (
    "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 main

import (
    "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和闭包的坑:不作为参数传递的都是引用地址的传递。需要作为参数传递(进行值拷贝传递)。

在线网站:

疑问? 闭包的概念

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值