当前位置: 首页 > news >正文

go语言怎么 控制一个变量输入的范围_go 学习笔记之值得特别关注的基础语法有哪些...

在上篇文章中,我们动手亲自编写了第一个 Go 语言版本的 Hello World,并且认识了 Go 语言中有意思的变量和不安分的常量.

相信通过上篇文章的斐波那契数列,你已经初步掌握了 Go 语言的变量和常量与其他主要的编程语言的异同,为了接下来更好的学习和掌握 Go 的基础语法,下面先简单回顾一下变量和常量相关知识.

有意思的变量和不安分的常量

  • 变量默认初始化有零值
eeaf5092da18e8aca5d4408233d0cd30.png

int 类型的变量初始化默认零值是零 0, string 类型的变量默认初始化零值是空字符串 ,其他类型也有相应的零值.

  • 多个变量可以同时赋值
fb740c4644c60b7da8e01cbdc53717ce.png

其他主要的编程语言大多支持多个变量初始化,但极少数有像 Go 语言这样,不仅支持同时初始化,还可以同时赋值.

  • 多个变量可以用小括号 () 统一定义
7c688f03890e6c1ac2076baa8f1058a0.png

用小括号 () 方式,省略了相同的 var 关键字,看起来更加统一

  • 变量类型可以被自动推断
745f5623cd8a52c9230d3c06c4b0dfc1.png

Go 语言可以根据变量值推测出变量类型,所以可以省略变量类型,再一次简化了变量定义,但是变量类型仍然是强类型,并不像 Js 那样的弱类型.

  • 变量可以用 := 形式更加简化
f45180e0c98b2486a0b7b1b5ffe223a2.png

省略了关键字 var,转而使用 := 符号声明并初始化变量值且利用自动类型推断能力进一步就简化变量定义,再次赋值时不能再使用 := 符号.

  • 变量 var 声明作用域大于变量 := 声明
c82846b07563f0291145e065afc7f880.png

var 声明的变量可以作用于函数外或函数内,而 := 声明的变量只能作用于函数内, Go 并没有全局变量的概念,变量的作用范围只是针对包而言.

  • 常量的使用方式和变量一致
6cc3dd50c4b88b41c03c4ff518f45678.png

常量声明关键字 const,常量和变量的使用方式一致,具备类型推断能力,也存在多种简化常量定义的形式.

  • 虽然没有枚举类型,但可以用 iota 配合常量来实现枚举
ea423519799fecf35f43dd28fdab5044.png

iota 在一组常量定义中首次出现时,其值为 0,应用到下一个常量时,其值为开始自增 1,再次遇到 iota恢复 0 .效果非常像 for 循环中的循环索引 i,明明是常量,偏偏玩出了变量的味道,也是我觉得 iota不安分的原因.

  • 常量 iota 有妙用,还可以进行位运算
54f9f543f7671ecdbeecb8a48be3acf7.png

定义二进制位最低位为 1 时表示可读的,左移一位表示可写的,左移两位表示可执行的,按照按位与运算逻辑,目标权限位若拥有可读权限,此时和可读常量进行按位与运算之后的结果一定是可读的,由此可见, iota非常适合此类操作.

总体来说, Go 语言中的变量很有意思,常量 iota 不那么安分,从上述归纳总结中不难看出, Go 语言和其他主流的编程语言还是有很大不同的,学习时要侧重于这些特殊之处.

如果想要回顾本节知识点,可以关注公众号[雪之梦技术驿站]找到go 学习笔记之有意思的变量和不安分的常量 这篇文章进行查看.

简洁的类型中格外关照了复数

在学习 Go 语言中的变量和常量时,虽然没有特意强调变量或常量的类型,但是大多数编程语言的类型基本都是差不多的,毕竟大家所处的现实世界是一样的嘛!

光是猜测是不够的,现在我们要梳理一遍 Go 语言的类型有哪些,和其他主流的编程语言相比有什么不同?

Go 语言的变量类型大致可以分为以下几种:

  • bool

布尔类型 bool,表示真假 true|false

  • (u)int , (u)int8 , (u)int16, (u)int32, (u)int64, uintptr

int 类型表示整数,虽然不带位数并不表示没有位数, 32 位操作系统时长度为 32 位, 64 位操作系统时长度为 64 位.最后一个 uintptr 是指针类型.

  • byte(uint8) , rune(int32), string

byte 是字节类型,也是 uint8 的别名,而 rune 是 Go 中的字符类型,也是 int32 的别名.

  • float32 , float64 , complex64 , complex128

只有 float 类型表示小数,没有 double 类型,类型越少对于开发者而言越简单,不是吗? complex64=float32+float32 是复数类型,没错!就是高中数学书本上的复数, 3+4i 那种奇怪的数字!

Go 的类型还是比较简单的,整数,小数,复数,字节,字符和布尔类型,相同种类的类型没有继续细分不同的名称而是直接根据类型长度进行命名的,这样是非常直观的,见名知意,根据数据大小直接选用类型,不费脑!

作为一种通用的编程语言, Go 内建类型中居然格外关照了复数这种数学概念类型,是一件有意思的事情,是不是意味着 Go 在工程化项目上做得更好?就像 Go 天生支持并发一样?

既然为数不多的类型中格外关照了复数类型,那我们简单使用下复数类型吧,毕竟其他类型和其他主流的编程语言相差不大.

c14e893485184f10956188aa7f244263.png

生命苦短,直接利用变量类型推断简化变量声明,求出复数类型 c 的模(绝对值)

既然学习了复数,怎么能少得了欧拉公式,毕竟是"世界上最美的公式

相关文章:

  • 颜率护鼎:读《战国策:秦兴师临周章》有感
  • python函数手册 stata_Python与Stata数据交互之时间变量
  • 知音少,弦断有谁听
  • python server酱_Python3和Server酱实现微信通知
  • 潜龙勿用,蓄积待用
  • python 不等于None 不等于空_python中输入0.1+0.2结果却不等于0.3?原来编程语言是这么算的……...
  • ihtml2document能不能根据id获取dom_javascript的DOM对象
  • 《高级分形艺术——核心算法、软件实现及创作技巧》
  • c语言fread函数的用法_Sparklyr 1.2支持foreach函数了
  • 一段对话,解决一个Exchange问题
  • ucosiii源码分析笔记 pdf下载_方舟编译器学习笔记14 DriverRunner源码分析
  • wxWidgets在windows VC++下的安装
  • python serial_浅谈python中的多线程和多进程
  • StatCVS 对使用CVS的项目进行深入统计的开源工具
  • 2020无人用的邮箱和密码大全_2020年之微波炉怎么用 微波炉使用注意事项大全
  • ----------
  • Google 是如何开发 Web 框架的
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【mysql】环境安装、服务启动、密码设置
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【知识碎片】第三方登录弹窗效果
  • ➹使用webpack配置多页面应用(MPA)
  • 2017年终总结、随想
  • Angular 响应式表单之下拉框
  • angular2 简述
  • Brief introduction of how to 'Call, Apply and Bind'
  • DataBase in Android
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • PAT A1092
  • 给github项目添加CI badge
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 试着探索高并发下的系统架构面貌
  • Hibernate主键生成策略及选择
  • 移动端高清、多屏适配方案
  • ​ssh免密码登录设置及问题总结
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • (1)Nginx简介和安装教程
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)计算机毕业设计ssm电影分享网站
  • (三十五)大数据实战——Superset可视化平台搭建
  • (十)c52学习之旅-定时器实验
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET CORE Aws S3 使用
  • .NET Core 版本不支持的问题
  • .NET MVC第五章、模型绑定获取表单数据
  • .Net7 环境安装配置
  • .net下简单快捷的数值高低位切换
  • .php文件都打不开,打不开php文件怎么办
  • /bin/rm: 参数列表过长"的解决办法
  • @angular/cli项目构建--http(2)
  • @Autowired @Resource @Qualifier的区别
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解