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:创建表 ...
随机推荐
- DB2重组表失败处理办法
set integrity for XXX all immediate unchecked reorg table XXX allow no access 如set integrity for a a ...
- c#序列化感悟(重点讲讲二进制序列化)
序列化是一种通过将对象转化为字节流,从而达到储存对象,或者将对象传输到内存,数据库或文件的一个过程,主要用途是保存对象的状态(包括对象的数据),方便对对象的重建,反之读取就是反序列化. 三种序列化类型 ...
- 微信小程序之video组件与cover-view组件和cover-image组件灵活应用
前言:最近忙着赶项目,没时间更博:希望和大家一起学习一起进步. 本人遇到的坑,以及爬出坑的方法:在某个微信小程序项目中,有这样一个需求:在滑块swiper组件和swiper-item组件中嵌套vide ...
- 洛谷P4859 已经没有什么好害怕的了
因为不存在任意两个数相同,那么设糖果比药片大的组有 \(x\) 个,药片比糖果大的组有 \(y\) 个,那么我们有: \[x + y = n, x - y = k \] 即: \[x = \frac{ ...
- echarts图表的封装
其实echarts官网有个快速上手的教程,一般人看一遍也知道是怎么回事,先给个传送门吧--五分钟上手 引入方式多种多样就自己去官网看了--这里简单介绍echarts怎么用,下方的封装函数比较重要 1. ...
- JS generator(生成器)
笔记整理自:廖雪峰老师的JS教程 目录 简介 与函数的不同之处 函数写法 generator写法 generator调用 generator对象的`next()`方法调用 `for ... of`循环 ...
- NoSQL之Redis配置与优化
NoSQL之Redis配置与优化 目录 NoSQL之Redis配置与优化 一.关系数据库和非关系数据库 1. 关系型数据库 2. 非关系型数据库 3. 非关系型数据库产生背景 4. 关系型数据库和非关 ...
- Java数据库连接池--DBCP浅析.
一. 为何要使用数据库连接池假设网站一天有很大的访问量,数据库服务器就需要为每次连接创建一次数据库连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出.拓机.数据库连接是一种关键的有限的昂贵 ...
- P2678 [NOIP2015 提高组] 跳石头
#include<bits/stdc++.h> using namespace std; int l,n,m,a[100010];//与起点的距离 bool check(int d) { ...
- Solution -「CF 1237E」Balanced Binary Search Trees
\(\mathcal{Description}\) Link. 定义棵点权为 \(1\sim n\) 的二叉搜索树 \(T\) 是 好树,当且仅当: 除去最深的所有叶子后,\(T\) 是满的: ...