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()
}

最新文章

  1. 来自XP的道别信
  2. Nancy之静态文件处理
  3. ui-router中的锚点问题(angular中的锚点问题)
  4. Visual Studio 中 Tab 转换为空格的设置
  5. ECharts 使用实例
  6. 关于Stringbulider类
  7. 一文看懂https如何保证数据传输的安全性的
  8. PHP算法练习1:两数之和
  9. css-改变input原始样式
  10. 日志与python日志组件logging
  11. SOAPdenovo组装软件使用记录
  12. mysql中Error : Invalid default value for 'timestamp'问题
  13. Java中同步的几种实现方式
  14. 不同的最小割(cqoi2016,bzoj4519)(最小割树)
  15. ZOJ 2975 Kinds of Fuwas
  16. 【BZOJ4554】[Tjoi2016&Heoi2016]游戏 二分图最大匹配
  17. Python- discover()方法与执行顺序补充
  18. Python高级教程-高阶函数
  19. verilog 2001中的一些新语法
  20. (数据科学学习手札33)基于Python的网络数据采集实战(1)

热门文章

  1. 洛谷P2240 【深基12.例1】部分背包问题(经典模板)
  2. foreEach 跳出循环
  3. HTML 5的革新——语义化标签
  4. Linux下Wordpress忘记密码后的解决方法
  5. 让 iOS 设备 “说出” 你想说的话!! #DF
  6. 抽象修饰符abstract
  7. idea导入mavenJar、mavenWeb项目
  8. jquery里的Ajax解析
  9. Solution -「NOI.AC 省选膜你赛」T2
  10. Solution -「LOCAL」舟游