GO基础记录

  • defer:生命周期结束后执行(栈顺序),在打开一些资源后,可以使用defer执行关闭.释放的操作,类似RAII
  • panic:类似于throw,抛出异常
  • make()用于构建切片,map,channel

defer,panic,recover配合使用代码

go 复制代码
defer func(){
    if ret := recover(); ret != nil{
        fmt.print(ret)
    }
}

panic("error")
  • interface:接口类型,只需定义接口然后实现接口,无需绑定,即可使用多态
  • interface{}:相当于any类型,可装万物
go 复制代码
type duck interface{
    gaga()
    walk()
}

type pskDuck struct{
    age int
}

type (p *pskDuck) gaga(){
    
}
type (p *pskDuck) walk(){
    
}

func main(){
    var value duck = &pskDuck{}
    d.gaga()
}
  • go在同一级目录下包名要一致,import的路径是相对于*.mod文件的路径

  • 小驼峰相当于private,大驼峰相当于public(针对于不同的包之间)

  • 在import文件前面可以声明包的别名

    • import std "fmt",从此fmt包要写成std
    • 在前面加.就类似于using namespace,不在需要通过包名使用(少使用,可能重名,污染)
    • 如果引入包,但是不使用,是会报错的,需要在前面添加_(import一个包会默认调用func init()函数,这是使用场景)
  • go get指令可以安装库,自动安装依赖

  • go mod init xxx初始化

  • go mod tidy添加需要用到但go.mod中查不到的模块,删除未使用的模块(推荐)

  • sync.WaitGroup:主要用于goroutine的执行等待

    • add用于添加等待的次数
    • done用于减少一次计数器
    • Wait阻塞等待
  • go关键字启动一个协程

  • atomic是一个原子包,里面提供了很多原子方法

  • channel分为有缓冲和无缓冲,如果需要使用无缓冲(make(chan string,0)),那么需要启动一个goroutine去读取

  • 可以通过close函数关闭一个channel,已经关闭的channel不能在放值,但是可以取值,

  • 可以通过for range不断地取值

    • <-chan只读channel

    • chan<-只写channel

    go 复制代码
      c := make(chan int,3)
      var send chan<- int = c
      var read <-chan int = c
      
  • go实现继承需要以匿名的形式嵌入结构体

    go 复制代码
    struct A{}
    struct B{
        A
    }
相关推荐
ch.ju10 小时前
Java—idea知识:如何创建新项目
java·开发语言·intellij-idea
Evand J10 小时前
【MATLAB例程,图像滤波降噪12】加权中值滑动窗口滤波(WMF)图像降噪,包含滤波质量评价。附代码下载链接
开发语言·图像处理·人工智能·计算机视觉·matlab·滑动窗口·滤波
Tairitsu_H10 小时前
[C++] C++11类和STL的新特性
开发语言·c++·stl·c++11
承渊政道10 小时前
Python IDLE鸿蒙PC适配全记录:从Tkinter桌面程序到ArkUI原生开发闭环
开发语言·python·harmonyos·鸿蒙系统·桌面程序
YMWM_11 小时前
查看realsense相机序列号脚本
开发语言·python·数码相机
传奇开心果编程11 小时前
【dioxus0.7基础语法学与练】第8课:RSX 宏 — Dioxus 声明式 UI 语法
开发语言·学习·rust
企业数字化笔记11 小时前
固定资产历史数据怎么导入系统?Excel模板、字段映射和数据校验
android·java·数据库·后端
西瓜太郎123411 小时前
request_id 如何串起请求、路由、计费和日志
后端·python
by组态11 小时前
Ricon组态系统通信配置指南
前端·后端·物联网
wuyk55511 小时前
18.Kruskal 算法:用最短的边连成一张网
开发语言·算法·图论