Go语言学习笔记

news2024/10/6 8:34:17

1. 普通函数声明/定义

函数声明包括函数名、形式参数列表、返回值列表(可省略)以及函数体

func 函数名(形式参数列表) (返回值列表){
    函数体
}

2. 接口定义及实现

接口定义,注意和上述函数声明作区分

type 接口名 interface{
    method1(参数列表) 返回值列表
    method2(参数列表) 返回值列表
}

实现接口所有方法

func(t 自定义类型) method1(参数列表) 返回值列表{
    // 方法实现
}

func(t 自定义类型) method2(参数列表) 返回值列表{
    // 方法实现
}

注:Golang中无implement这样的关键字

3. Go Context详解

Go Context通常被称为上下文,在go中,理解为goroutine的运行状态、现场,存在上下层goroutine context的传递,上层goroutine会把context传递给下层goroutine。每个goroutine在运行前,都要事先知道程序当前的执行状态,通常将这些状态封装在一个 context变量,传递给要执行的goroutine中。
通过context包,可以非常方便地在请求goroutine之间传递请求数据、取消信号和超时信息。

4. goroutine调度模型

goroutine 是轻量级线程,goroutine 的调度是由 Golang 运行时进行管理的
MPG模式
M:操作系统的主线程
P:协程执行需要的上下文
G:协程
goroutine之间如何进行通讯?
全局变量的互斥锁
使用管道Channel

5. defer、panic和recover

Go 语言的 defer 会在当前函数返回前执行传入的函数,它会经常被用于关闭文件描述符、关闭数据库连接以及解锁资源;
panic 能够改变程序的控制流,调用 panic 后会立刻停止执行当前函数的剩余代码,并在当前 Goroutine 中递归执行调用方的 defer;
recover 可以中止 panic 造成的程序崩溃。它是一个只能在 defer 中发挥作用的函数,在其他作用域中调用不会发挥作用。
参考博客:Go语言设计与实现

6. import导包时的三种情况

示例代码:

import (
    v2 "github.com/YFJie96/wx-mall/controller/api/v2"
    _ "github.com/YFJie96/wx-mall/docs"
    . "fmt"
    "github.com/gin-gonic/gin"
)

(1)v2 :别名, 导入包的一个别名,可以直接使用 “v2.” 调用包内接口或方法
(2)_ :在导入路径前加入下划线表示只执行该库的 init 函数而不对其它导出对象进行真正的导入。因为 Go 语言的数据库驱动都会在 init 函数中注册自己,所以我们只需要进行上述操作即可;否则的话,Go 语言的编译器会提示导入了包却没有使用的错误
(3). :点相当于把导入包的函数,同级导入到当前包,可以直接使用包内函数名进行调用

7. GOPATH详解

在这里插入图片描述
参考博客:GOPATH 与 GO Modules

8. Go中的格式化打印“%+v”和“%v”区别

“%+v”会以字段键值对的形式key-value格式打印
“%v”只会打印字段值value信息
参考博客:Go中的格式化打印

9. Const

在这里插入图片描述

10. Go语言中的时间处理

昨日0点(格式化)

ts := time.Now().AddDate(0, 0, -1)
	timeYesterday := time.Date(ts.Year(), ts.Month(), ts.Day(), 0, 0, 0, 0, ts.Location())
	timeStr := timeYesterday.Format("2006-01-02")
	fmt.Println(timeStr)

某天的第二天的0点整

nowTimeStr := "2022-02-28"
	//使用Parse 默认获取为UTC时区 需要获取本地时区 所以使用ParseInLocation
	t2, _ := time.ParseInLocation("2006-01-02", nowTimeStr, time.Local)
	towTimeStamp := t2.AddDate(0, 0, 1).Unix()
	towTimeStr := time.Unix(towTimeStamp, 0).Format("2006-01-02 15:04:05")
	fmt.Println(towTimeStr)

例:
在这里插入图片描述

11. Go中Handler

在这里插入图片描述
Multiplexer根据URL将请求路由给指定的Handler。Handler用于处理请求并给予响应。更严格地说,用来读取请求体、并将请求对应的响应字段(respones header)写入ResponseWriter中,然后返回。
参考博客:Golang Handler详解

12. Go语言变量作用域、指针

参考博客:Go语言变量作用域、指针、数组

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/37429.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【语音去噪】谱减法+维纳滤波+卡尔曼滤波语音去噪【含Matlab源码 1881期】

⛄一、谱减法维纳滤波卡尔曼滤波语音去噪简介 1 维纳滤波算法 在传统的去噪算法中,维纳滤波因其操作简单、去噪效果好,被公认为一种经典的去噪算法。语音信号在时域的表示为: yi( t) si( t) ni( t) ,其中si( t) 、ni( t) 和yi( t) 分别是第i帧原始语音信号、噪声和被噪声污染…

springboot反射执行private方法@Autowired字段为空

springboot反射执行private方法Autowired字段为空描述错误复现controllerserviceReflectServiceImplReflectCallServiceservice 层切面debug 结果图调用 reflectTest 方法(public反射)调用 reflectTest1方法(private反射)分析参考描述 业务代码写完之后,懒得写mock代…

Python基础(四):Python必需掌握基础注释、变量、输出

文章目录 Python必需掌握基础注释、变量、输出 一、注释 1、作用 2、分类及语法 3、快速体验 4、总结 二、变量 1、作用 2、定义变量 三、输出 1、格式化符号 2、体验 3、转义字符 4、结束符 Python必需掌握基础注释、变量、输出 14天学习训练营导师课程&#xf…

[附源码]计算机毕业设计JAVA汽车租赁系统

[附源码]计算机毕业设计JAVA汽车租赁系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis M…

自动化运维CICD

目录 概述 为什么持续集成和发布可以提高效率 如何实现 1、在linux服务器安装部署代码仓库 2、安装jenkins 使用shell脚本实现CICD 使用pipeline实现CICD 使用Blue Ocean实现CICD 概述 持续集成(Continuous Integration,CI)和持续发布&#xff0…

C/C++编译器配置——MinGW下载安装

一. 前言 由于重装Win11系统,所有配置环境需要重装,对于C/C编译器MinGW配置做一个简单记录。 VS code等软件只提供编辑器,不提供编译器,因此windows系统上的C/C编译器需要通过安装MinGW实现。 二. 安装过程 在MinGW官网下载安装…

元宇宙产业委风语筑董事长李晖:到更多城市探索元宇宙“虚实结合”

导语:近期李晖和风语筑团队在深度探索“虚实结合”,布局元宇宙,谋求更多的创新。他受中国移动通信联合会元宇宙产业委员会委托,参与研究编撰《元宇宙十大技术》,并为该书做序《元宇宙:数字技术构建美好生活…

(十)延迟队列

延迟队列1. 延迟队列概念2. 延迟队列使用场景3. 整合Springboot4. TTL队列1. 代码架构图2.MQ组件配置文件类代码3. 消息生产者代码4. 消息消费者代码5. 延时队列优化1. 代码架构图2. 配置文件类代码3. 消息生产者代码6. Rabbitmq插件实现延迟队列1.安装延时队列插件2.代码实现7…

强强联合:OpenFeign 整合 Sentinel

书接前文: 微服务间的远程接口调用:OpenFeign 的使用 当项目中使用了 OpenFeign 后,可以很方便的进行远程服务调用,现在有个问题,假如远程服务出现故障了,调不了远程的接口,这边又着急等着返回…

系统启动其实就2个步骤BIOS和MBR(和之后的init/systemd的关系)

1.让计算机知道系统被放在哪个设备上了(BIOS) 计算机启动先启动bios,再去读MBR,MBR动了才会启动操作系统 2.让计算机知道哪里的分区是活动分区(MBR),找出来把系统引导到这里来 这两部类似于早先游戏里的红色警报和星…

springcloud20:springcloudalibaba之Nacos

为什么会出现spring alibaba 整个Netflix项目进入维护模式(不会添加新功能) springcloud: Nerflix:eureka ribbon feign ruul config springcloud一些小技术和其整合 此时内部出问题 SpringCloud 吸收了springcloud alibaba 此时springcloud带了了什么呢…

【笔试强训】Day 3

🌈欢迎来到笔试强训专栏 (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort目前状态:大三非科班啃C中🌍博客主页:张小姐的猫~江湖背景快上车🚘,握好方向盘跟我有一起打天下嘞!送给自己的一句鸡汤&#x…

python中pytest库用法详解

Pytest 是用于测试 Python 应用的 Python 库。 官方文档:Full pytest documentation — pytest documentation 安装: pip install pytest pytest 测试发现约定规范 如果未指定任何参数,则在testpaths(如果已配置)或…

智慧水利数字孪生案例分享:数字孪生水利,助力三峡科学防洪防汛

长江是我国第一大河流,长江流域在我国经济发展中,占据举足轻重的地位。与此同时,长江流域频繁的洪涝、气象灾害,严重影响危害着流域内经济社会发展和生态环境,因此长江流域防汛管理被作为我国防洪体系中的关键工程。水…

阿里大咖纯手写的微服务入门笔记,从基础到进阶直接封神

前言 学习是一种基础性的能力。然而,“吾生也有涯,而知也无涯。”,如果学习不注意方法,则会“以有涯随无涯,殆矣”。 学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力。我们在刚出生的…

通讯/服务器公司 测试|测试开发 面试真题|面经 汇总

浪潮 测试开发 一面 8.24 三个面试官。一个HR,两个技术官。 1 为什么选择测开?意向工作地点。 2 软件质量模型 3 测试要做哪些测试 4 集成测试和验收测试的区别? 5 黑盒测试和白盒测试的理解 6 知道哪些黑盒测试和白盒测试的方法 7 手工测试…

【观察】“中国算力网”向全社会开放,意味着什么?

今天,算力的重要性已被提升到全新的高度,这是因为算力作为数字经济时代新的生产力,对推动科技进步、行业数字化转型以及经济社会发展都发挥着至关重要的作用。根据中国信通院发布《中国算力发展指数白皮书(2022年)》显…

AE插件:流体渐变着色特效动画生成 Potok mac

Potok是After Effects的流体渐变插件。它会产生噪波并使用渐变对其进行着色。可以从UI Gradient Control或任何图层设置渐变。噪波可以用任何层掩盖。 Noise噪波:Potok 插件有一个内置的噪音发生器,有四种噪音类型。噪声动画可以无缝循环。此外&#xf…

ASM3142 USB 3.1控制芯片_ ASM3242 USB 3.2 2x2 控制器

一、ASM3142 USB 3.1控制芯片 ASM3142 USB 3.1控制芯片将成为通过USB进行快速数据传输的新标准。是全球最快的USB解决方案, 可提高性能并实现更高的功效,节省高达50%的功耗。 与ASM 2142 USB控制芯片相比,新的ASM 3142超高速USB控…

pandas数据分析:pandas基础函数入门教程【w3school学习笔记】

系列文章目录 pandas数据分析:十分钟快速入门重点函数速查 文章目录系列文章目录前言一、Pandas作用二、数据结构2.1 Series2.2 DataFrame三、读取数据3.1 读取CSV文件数据3.2 读取JSON文件数据四、分析数据五、清洗数据5.1 空值5.1.1 删除包含空值的行5.1.2 填充空…