一、变量

1.1 变量的概念

  • 变量是计算机语言中存储数据的抽象概念。变量的功能是存储数据。变量通过变量名访问。

  • 变量的本质是计算机分配的一小块内存,专门用于存放指定数据,在程序运行过程中该数值可以发生改变。

  • 变量的存储往往具有瞬时性,或者说是临时存储,当程序运行结束,存放该数据的内存就会释放,而该变量就会消失。

  • Go语言的变量名是由数字,字母,下划线组成,首个字符不能为数字。

1.2 声明变量

  • 未初始化的标准格式

    • var 变量名 变量类型

  • 未初始化的批量格式

    • 不用每行都用var 申明

      var (

      a int

      b string

      c[]float32

      d func() bool

      e struct{

      x int

      y string

      }

      )

    • 未初始化变量的默认值

      • 整行和浮点型变量默认值: 0

      • 字符串默认值为空字符串

      • 布尔型默认值为false

      • 函数,指针变量初始值为nil

  • 初始化变量的标准格式

    • var 变量名 类型 = 表达式

  • 初始化变量的编译器自动推断类型格式

    • var 变量名 = 表达式

  • 初始化变量的简短声明格式(短变量声明格式)

    • 变量名:= 表达式

    • 使用 := 赋值操作符,:=可以高效地创建一个新的变量,称之为初始化声明。

    • 声明语句省略了var关键字

    • 变量类型将由编译器自动推断

    • 这是声明变量的首选形式,但是它只能被用在函数体内,而不可以用于全局变量的声明与赋值

    • 该变量名必须是没有定义过的变量名,若定义过,将发生编译错误

    • 在多个短变量声明和赋值中,至少有一个新声明的变量出现在左侧中,那么即便有其他变量名可能是重复声明的,编译器也不会报错

  • 变量多重赋值(多个变量同时赋值)

    • Go语法中,变量初始化和变量赋值是两个不同的概念,Go语言的变量赋值与其他语言一样,但是Go提供了其他程序员期待已久的多重赋值功能,可以实现变量交换。多重赋值让Go语言比其他语言减少了代码量

  • 匿名变量

    • Go语言的函数可以返回多个值,而事实上我们并不是对所有的返回值都用得上,那么就可以使用匿名变量,使用"_"下划线替换即可

    • 匿名变量不占用命名空间,不会分配内存

二、数据类型

  • 基本数据类型(原生数据类型):整型,浮点型,布尔型,字符串,字符(byte rune)

  • 复合数据类型(派生数据类型):指针(pointer),数组(array),切片(slice),映射(map),函数(function),结构体(struct),通道(channel)

2.1 整型

  • 整型分为两大类:

    • 按长度分:init8 init6 init32 init64 int

    • 无符号整型:unit8 unit16 unit32 unit64 unit

    • 其中unit8就是byte型,init16对应C语言的short型,init64对应C语言的long型

2.2 浮点型

  • Go语言支持4中浮点型数:float32 float64 complex64

  • float32的最大范围是3.4e38用常量定义是:math.MaxFloat32

  • float64的最大范围是1.8e308用常量定义是:math.MaxFloat64

2.3 布尔型

  • 声明方式 var flag bool

  • 布尔型无法参与数值运算,也无法与其他类型进行转换

2.4 字符串

  • 字符串在Go语言中是以基本数据类型出现的,使用字符串就像使用其他原生基本数据类型int float32, float64 bool一样

  • 字符串可以使用转移符

    • \r 回车符return 返回行首

    • \n 换行符 new line 直接调到下一行的同列位置

    • \t 制表符 TAB

    • \ '单引号

    • \ " 双引号

    • \ 反斜杠

  • 定义多行字符串

    • 双引号书写字符串被成为字符串字面量(string literal)这种字面量不能跨行

    • 多行字符串需要使用 " ` "反引号,多用于内嵌源码和内嵌数据

    • 在反引号中的所有代码不会被翻译器识别,而只是作为字符串的一部分

2.5 字符

字符串中的每一个元素叫做 "字符",定义字符时使用单引号,Go语言的字符有两种:

  • byte型:其实是 unit8的别名,代表了一个ASCII码的一个字符

  • rune型:其实就是init32。代表了一个UTF-8字符,当需要处理中文等unicode字符集时需要用到rune类型

    • var a byte = 'a'

    • var b rune = '—'

三、打印格式化

3.1 通用

  • %v 值的默认格式表示

  • %+v 类似%v,但输出结构体时会添加字段名

  • %#v 值的Go语法表示

  • %T 值的类型的Go语法表示

3.2 布尔值

  • %t 单词 true 或 false

3.3 整数

  • %b 表示为二进制

  • %c 该值对应的unicode码值

  • %d 表示为十进制

  • %8d 表示该整型长度是8,不足8则在数值前补空格。如果超出8,则以实际为准。

  • %08d 数字长度是8,不足8位的,在数字前面补0。如果超出8,则以实际为准

  • %o 表示为八进制

  • %q 该数值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示

  • %x 表示为十六进制,使用a-f

  • %X 表示为十六进制,使用A-F

  • %U 表示为Unicode格式,U+1234等价于"U+%04x" unicode

3.4 浮点数与复数的两个组分

  • %b 无小数部分,二进制指数的科学计数法,如-123456p-78;参见strconv.FornatFloat

  • %e (=%.6e)有6位小数部分的科学计数,如-1234.456e+78

  • %E 科学计数法,如-123.456+78

  • %f (=%.6f)有6位小数部分,如:123.456.12 float

  • %F 等价于%f

  • %g 根据实际情况采用%e或%f格式(以获得更简洁,准确的输出)

  • %G 根据实际情况采用%E或%F格式(以获得更简洁,准确的输出)

四、常量

4.1 声明方式

  • 相对于变量,常量是恒定不变的值,例如圆周率

    • 常量是一个简单值的标识符,在程序运行时,不会被改变

  • 常量中的数据类型只可以是布尔型,数字型(整数型,浮点型和复数)和字符串型

  • 常量的定义格式:

    • const 标识符[类型] = 值

    • 可以省略类型说明符[type],因为编译器可以根据变量的值来自动推断其类型

      • 显式类型定义: const B string = 'Steven'

      • 隐式类型定义:const C = 'Steven'

  • 多个相同类型的声明可以简写为:

    • const WINTH,HEIGHT = value1,value2

  • 常量定义后未被使用,不会在编译时出错

4.2 常量用于枚举(常量组)

  • 例如以下格式:

    const(

    Unknown = 0

    Female = 1

    Male = 2

    )

    数字0,1和 2 分别代表未知性别,男性和女性

  • 常量组中如果不执行类型和初始值,则与上一行非空常量的值相同。

    const(

    a = 10

    b

    c

    )

    打印a ,b,c 输出:10 10 10

4.3 iota

  • iota,特殊常量值,是一个系统定义的可以被编译器修改的常量值,iota只能出现在常量组中

  • 在每一个const关键字出现时,被重置为0,然后每出现一个常量,iota所代表的数值会自动增加1,iota可以理解成常量组中的常量的计数器,不论该常量的值是什么,只要有一个常量,那么iota就加1

  • iota可以被用作枚举值:

    const(

    a = iota

    b = iota

    c = iota

    )

    println(a,b,c)

    • 打印输出:0 1 2

Q_Go2的更多相关文章

随机推荐

  1. adfs环境安装

    安装文档参考: https://docs.microsoft.com/zh-cn/windows-server/identity/ad-fs/deployment/set-up-the-lab-env ...

  2. 一天一个设计模式——Prototype 原型模式

    一.模式说明 看了比较多的资料,对原型模式写的比较复杂,个人的理解就是模型复制,根据现有的类来直接创建新的类,而不是调用类的构造函数. 那为什么不直接调用new方法来创建类的实例呢,主要一个原因是如果 ...

  3. redis常用命令--strings

    strings常用命令: set key value:存值 get key:取值 append key value:在值后追加值 strlen key:获取长度 mset key1 value1 ke ...

  4. python 流行库、库的基本用法

    进入github,输入python 点击see topic 进入python流行的库  链接 https://github.com/topics/python 1.QuantLib 金融衍生品数据库 ...

  5. 读取word模板,填充数据后导出

    一.需求说明 定期生成word报告,报告中含有文本.表格.图表等元素,依次获取进行替换,保留原有样式,生成新的word文档 二.引入依赖 <dependency> <groupId& ...

  6. SpringCloud学习之Stream消息驱动【默认通道】(十)

    在实际开发过程中,服务与服务之间通信经常会使用到消息中间件,而以往使用了中间件比如RabbitMQ,那么该中间件和系统的耦合性就会非常高,如果我们要替换为Kafka那么变动会比较大,这时我们可以使用S ...

  7. Win10下 Java环境变量配置

    安装java的JDK   下载地址 此电脑->属性->高级设置 "系统变量"新建   变量名:Java_Home   变量值:D:\Program Files\Java ...

  8. arp攻击 (可查看同一局域网他人手机照片)

    国家法律一定要遵守,知识要用在对的地方. 本贴只为了和大家交流学习,请勿用在其他地方,损害任何人的利益. 今天我,来说一下arp攻击的原理和教程 原理什么的还是自行百度好,因为专业的说明是严谨而又经得 ...

  9. mybatis中foreach collection的三种用法

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separator,close. ...

  10. 协程与异步IO

    协  程 协程,又称微线程,纤程. 协程的优势:              协程的特点在于是一个线程执行.              协程的最大优势是极高的执行效率,因为子程序切换不是线程切换,而是由 ...