[Day 10] -『 GO语言学习笔记』- if 叙述的起始赋值

以下笔记摘录自『 The Go Workshop 』。

我们时常呼叫某个函式,但只会拿函式的回传值来检查它是否正确执行,之後就再也不需要这个值了。比方说写入档案、将资料存入资料库等等,只是想确认动作执行完毕後有没有发生问题。

这种情况下,函式传回的变数後面就用不到了,但只要你接收它,那这些资料就会存在其作用范围内,等於是多占了一份记忆体。为了避免放费,可以把变数的作用范围限制在if叙述范围,这样只要离开if叙述,该变数就会消灭。

起始赋值叙述(init statement)

If <起始赋值叙述>; <布林值运算式> {
    <程序区块>
}

注意Go语言只允许在<起始赋值叙述>使用以下简单的叙述:

  1. 变数赋值和短变数宣告赋值,例如i := 0
  2. 算数或逻辑运算式,例如i :=(j * 10) == 40
  3. 递增或递减的运算式,例如i++
  4. 在并行性运算中传值给通道的叙述

最常犯得错误就是企图在起始赋值叙述用var定义变数,这是不允许的,只能在这里使用短变数宣告。

For example,

package main

import (
	"errors"
	"fmt"
)

func validate(input int) error {
	if input < 0 {
		return errors.New("输入值不得为负")
	} else if input > 100 {
		return errors.New("输入值不得超过 100")
	} else if input%7 == 0 {
		return errors.New("输入值不得为 7 的倍数")
	} else {
		return nil
	}
}

func main() {
	input := 21
	if err := validate(input); err != nil {
		fmt.Println(err)
	} else if input%2 == 0 {
		fmt.Println(input, "是偶数")
	} else {
		fmt.Println(input, "是奇数")
	}
}

//output
输入值不得为 7 的倍数

使用起始赋值叙述定义一个变数err,并对他赋值,然後将这个变数拿来用在if叙述的布林值运算中,只要main()的if...else if...else完成任务後,err变数就会离开作用范围,被Go语言的记忆体管理系统回收。


<<:  Fortran 语言和你 SAY HELLO!!

>>:  Day12

用React刻自己的投资Dashboard Day3 - React专案初始架构

tags: 2021铁人赛 React 使用 Creat react app 对於React的初学者...

Day 17 读 Go Concurrency Patterns - Rob Pike IV

续上篇,Day 16 读 Go Concurrency Patterns - Rob Pike II...

[Day 4] SRE - 保持精简的监控

监控 今天来介绍监控的四个黄金讯号、如何简化以及如何维护。 四个黄金讯号 延迟 流量 错误 饱和度 ...

TypeScript 能手养成之旅 Day 4 基础型别 & 扩充型别

前言 前面介绍完型别注解和型别推论,今天要和大家来谈 TypeScript 有哪些类型的型别,在这些...

[Day 12] Forensics 小挑战

今天心情蛮好的,期待叻2周终於等到这天了,生平第一次染发:) 这篇文有一半是我边染发变打出来的~ 染...