Go基础知识梳理(二)
Go基础知识梳理(二)
简单函数的定义
//有参数有返回值
func sum(a int, b int) int {
return a + b
}
//无返回值
func sum(a int, b int) {}
//无参数无返回值
func sum(){}
//返回多个值
func sum(a int, b int) (int, error) {
return a+b, nil
}
//参数简写(类型相同)
func sum(a, b int) int {
return a + b
}
匿名函数的定义
func main() {
//定义一个匿名函数sum
sum := func(a, b int) int {
return a + b
}
res := sum(1 + 2)
fmt.Println(res) // 3
}
defer关键字
//defer 语句会在return后执行,并且是栈原理,先注册就先入栈,最后执行
func main() {
print := func(a string) {
fmt.Println(a)
}
defer print("First")
defer print("Second")
return
}
打印结果
Second
First
func main() {
a := 0
print := func(a int) {
fmt.Println(a)
}
defer print(a)
a += 1
}
打印结果
0 //因为defer语句先注册,已经获取到了该变量的副本
//另一种情况
func main() {
a := 0
print := func(a *int) {
fmt.Println(*a)
}
defer print(&a)
a += 1
return
}
打印结果
1 //因为获取到的是a变量的内存地址
Error错误
//在多个返回值的函数中,error通常放在最后一位进行返回
func sum(a, b int) (int, error) {
return a + b, errors.New("fail")
}
//对于处理有err返回的,应先用if处理
func main() {
a := "1"
b, err := strconv.Atoi(a)
if err != nil {
return
}
fmt.Println(b)
}
//defer 吾句应该放到四判断的后面,不然有可能产生 panic
//正确写法
func sql() {
SQL := "SELECT * FROM test"
stmt, err := self.Conn.Prepare(SQL)
if err != nil {
logger.Logln(logger.ERROR, err)
return false
}
defer stmt.Close()
}
//错误写法
func sql() {
SQL := "SELECT * FROM test"
stmt, err := self.Conn.Prepare(SQL)
defer stmt.Close() //updated
if err != nil {
logger.Logln(logger.ERROR, err)
return false
}
//defer stmt.Close()
}
Go基础知识梳理(二)的更多相关文章
- [SQL] SQL 基础知识梳理(二) - 查询基础
SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...
- [SQL] SQL 基础知识梳理(一)- 数据库与 SQL
SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...
- [SQL] SQL 基础知识梳理(三) - 聚合和排序
SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...
- [SQL] SQL 基础知识梳理(四) - 数据更新
SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...
- [SQL] SQL 基础知识梳理(五) - 复杂查询
SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...
- [C# 基础知识梳理系列]专题六:泛型基础篇——为什么引入泛型
引言: 前面专题主要介绍了C#1中的2个核心特性——委托和事件,然而在C# 2.0中又引入一个很重要的特性,它就是泛型,大家在平常的操作中肯定会经常碰到并使用它,如果你对于它的一些相关特性还不是很了解 ...
- C#基础知识梳理索引
C#基础知识梳理索引 一 引子 之前曾写了一篇随笔<.NET平台技术体系梳理+初学者学习路径推荐+我们的愿景与目标> 三个月过去了,目标使更多的编程初学者,轻松高效地掌握C#开发的基础,重 ...
- [SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式
SQL 基础知识梳理(六)- 函数.谓词.CASE 表达式 目录 函数 谓词 CASE 表达式 一.函数 1.函数:输入某一值得到相应输出结果的功能,输入值称为“参数”,输出值称为“返回值”. 2. ...
- [SQL] SQL 基础知识梳理(七)- 集合运算
SQL 基础知识梳理(七)- 集合运算 目录 表的加减法 联结(以列为单位) 一.表的加减法 1.集合:记录的集合(表.视图和查询的执行结果). 2.UNION(并集):表的加法 -- DDL:创建表 ...
随机推荐
- mongodb中oplogsize大小设置
1 oplogsize大小配置: 2 mongodb副本集构建的高可用方案,最少需要三个节点,一个主节点master,一个从节点slave,一个选举仲裁节点arbiter.当主节点奔溃的时候,仲裁节点 ...
- 【C++】【源码解读】std::is_same函数源码解读
std::is_same使用很简单 重点在于对源码的解读 参考下面一句静态断言: static_assert(!std::is_same<bool, T>::value, "ve ...
- NOIP2020 部分简要题解
C 首先考虑 \(n = 2\) 怎么做. 可以发现的是我们一定要借助空柱子 \(n + 1\),并且两个柱子都必须要移动. 注意到此时本质上就是将两种球分类,于是我们考虑能否将一个柱子上两种颜色分开 ...
- 「SDWC2018 Day1」网格
题目当中有三条限制,我们来逐一考虑.对于第一条限制,每次走动的增加量 \(x_i \le M_x, y_i \le M_y\),可以发现一共走的步数是确定的,那么就相当于解这样两个方程组: \[x_1 ...
- 自定义ASP.NET MVC Html标签辅助方法
原文:https://blog.csdn.net/a497785609/article/details/50184779 在ASP.NET MVC中,Html辅助方法给我们程序员带来很多方便,其重要性 ...
- RPC原理及RPC实例分析(转)
出处:https://my.oschina.net/hosee/blog/711632 在学校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服 ...
- 判断js对象是否为空
let _isEmptyObj = function(obj) { for(var key in obj) { return false; } return true; }
- java篇之JDBC原理和使用方法
JDBC学过但又属于很容易忘记的那种,每次要用到,都要看下连接模式.每次找又很费时间,总之好麻烦呀呀呀,所以写篇博客,总结下原理和常用接口,要是又忘了可以直接来博客上看,嘿嘿. 一.什么是JDBC 1 ...
- PMD的使用学习
是什么? 静态代码分析器 能找出什么问题? 可能的 bugs - 空的 try/catch/finally/switch 声明 死码 - 未使用的本地变量,参数和私有方法 次优代码 - 无用的 Str ...
- js--事件流、事件委托、事件阶段
前言 JavaScript 与 HTML 的交互是通过事件实现的,事件代表文档或浏览器窗口中某个有意义的时刻.可以使用仅在事件发生时执行的监听器(也叫处理程序)订阅事件.本文总结一下 JS 中的事件相 ...