Go语言笔记—Go基础语法(2)
目录
基本数据类型
布尔型
数字型
整形
浮点型
字符和字符串
数据类型转换
运算符
算术运算符
关系运算符
逻辑运算符
位运算符(二进制)
赋值运算符
其他运算符
拓展:键盘输入输出
编码规范
为什么需要代码规范
代码规范
基本数据类型
在Go编程语言中,数据类型用于声明函数和变量。
数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。
编译器在进行编译的时候,就要知道每个值的类型,这样编译器就知道要为这个值分配多少内存,并且知道这段分配的内存表示什么。
布尔型
布尔型的值只可以是常量true或者false
布尔类型的值默认为false
package mainimport "fmt"func main() {// var 变量名 数据类型var isFlang boolfmt.Println(isFlang)
}
//输出结果为:false
数字型
整形
整形int和浮点型float32、float64、Go语言支持整形和浮点型数字,并且支持负数,其中位 的运算采用补码
序号 | 类型和描述 |
---|---|
1 | uint8无符号8位整型(O到255) |
2 | uint16无符号16位整型(O到65535) |
3 | uint32无符号32位整型(O到4294967295) |
4 | uint64无符号64位整型(0到18446744073709551615) |
5 | int8有符号8位整型(-128到127) |
6 | int16有符号16位整型(-32768到32767) |
7 | int32有符号32位整型(-2147483648到2147483647) |
8 | int64有符号64位整型(-9223372036854775808到 9223372036854775807) |
package mainimport "fmt"func main() {//定义一个整形//byte uint8//rune int32//int int64var age int = 18fmt.Printf("%T,%d\n", age, age)//定义一个浮点型var money float32 = 300.15//这里打印浮点数类型为%f//默认是6位小数打印fmt.Printf("%T,%f\n", money, money)
}
//输出结果:int,18
//float32,300.149994
浮点型
1、关于浮点数在机器中存放形式的简单说明,浮点数=符号位+指数位+尾数位
2、尾数数部分可能丢失,造成精度损失。-123.0000901
序号 | 类型和描述 |
---|---|
1 | float32 IEEE-754 32位浮点型数 |
2 | float64 lEEE-75464位浮点型数 |
3 | complex64 32位实数和虚数 |
4 | complex128 64位实数和虚数 |
类型别名
序号 | 类型和描述 |
---|---|
1 | byte类似于uint8 |
2 | rune类似于int32 |
3 | uInt32或64位 |
4 | int与uint一样大小 |
5 | uintprt无符号整形,用于存放一个指针 |
字符和字符串
字符串就是一串固定长度的字符连接起来的字符序列。
Go的字符串是由单个字节连接起来的。
Go语言的字符串的字节使用UTF-8编码标识Unicode文本。
package mainimport "fmt"func main() {//字符串 双引号var str stringstr = "hello,word"//输出打印的类型和值fmt.Printf("%T,%s\n", str, str)// 字符 单引号//字符为数值类型,需要%d打印//所有中国字的编码表:GBK//全世界的编码表:Unicode编码表v1 := 'A'v2 := "B"v3 := '中'//编码表 ASCII字符吗fmt.Printf("%T,%d\n", v1, v1)fmt.Printf("%T,%s\n", v2, v2)fmt.Printf("%T,%d\n", v3, v3)//字符串拼接fmt.Printf("hello" + "学相伴\n")//转义字符 \fmt.Printf("hello\"学相伴\"\n")//间隔符 \t tabfmt.Printf("hello\"学相伴\t")}
数据类型转换
在必要以及可行的情况下,一个类型的值可以被转换成另一种类型的值。
由于Go语言不存在隐式类型转换,因此所有的类型转换都必须显式的声明
package mainimport "fmt"func main() {a := 3 //intb := 4.0 //float64//需求:将a转换为float64位c := float64(a)//boll 整形是不能转换为bool的//cannot convert a (variable of type int) to type bool//e := bool(a)fmt.Printf("%T\n", a)fmt.Printf("%T\n", b)fmt.Printf("%T\n", c)//fmt.Printf("%T\n", e)
}
/*输出结果为:intfloat64float64*/
类型转换只能在定义正确的情况下转换成功,例如从一个取值范围较小的类型转换到一个取值范围较大的类型(将int16转换为int32)。
当从一个取值范围较大的类型转换到取值范围较小的类型时(将int32转换为int16或将 float32转换为 int),会发生精度丢失(截断)的情况。
运算符
算术运算符
下表列出了所有Go语言的算术运算符。假定A值为10,B值为20。
运算符 | 描述 | 实例 |
---|---|---|
+ | 相加 | A+B输出结果30 |
- | 相减 | A-B输出结果-10 |
* | 相乘 | A*B输出结果为200 |
/ | 相除 | B/A输出结果为2 |
% | 求余 | B%A输出结果为0 |
++ | 自增 | A++输出结果11 |
-- | 自减 | A--输出结果为9 |
package mainimport "fmt"func main() {var a int = 10var b int = 3// + - * / % ++ --fmt.Println(a + b)fmt.Println(a - b)fmt.Println(a * b)fmt.Println(a / b)a++ //a=a+1fmt.Println(a)a-- //a=a-1fmt.Println(a)
}
/*输出结果为:
13
7
30
3
11
10
*/
关系运算符
下表列出了所有Go语言的关系运算符。假定A值为10,B值为20。
运算符 | 描述 | 实例 |
---|---|---|
== | 检查两个值是否相等,如果相等返回True否则返回false | A==B 为false |
!= | 检查两个值是否不相等,如果不相等返回True否则返回false | A!=B为true |
> | 检查左边值是否大于右边值,如果是返回True否则返回false | A>B 为false |
< | 检查左边值是否小于右边值,如果是返回True否则返回false | A<B为True |
>= | 检查左边值是否大于等于右边值,如果是返回True否则返回false | A>=B 为false |
<= | 检查左边值是否小于等于右边值,如果是返回True否则返回false | A<=B 为true |
package mainimport "fmt"func main() {var A int = 10var B int = 20//关系运算符,结果都是boolfmt.Println(A == B)fmt.Println(A != B)fmt.Println(A > B)fmt.Println(A < B)fmt.Println(A >= B)fmt.Println(A <= B)
/*
输出结果:falsetruefalsetruefalsetrue
*/
}
逻辑运算符
下表列出了所有Go语言的逻辑运算符。假定A值为true,B值为false。
运算符 | 描述 | 实例 |
---|---|---|
&& | 逻辑AND运算符,如果两边的操作数都是True,则条件True,否则为False。 | A&&B 为false |
|| | 逻辑OR运算符,如果两边的操作数有一个True,则条件True,否则为False。 | A||B为true |
! | 逻辑NOT运算符,如果条件为True,则逻辑NOT条件False,否则为True。 | !(A&&B )为true |
逻辑与&&
package mainimport "fmt"func main() {var a bool = truevar b bool = false//如果a和b同时为真if a && b {//那么我们输出为 truefmt.Println(a)} else {//否则输出为 falsefmt.Println(b)// 输出的结果为 :false}}
逻辑或||
遇真则真,全假则假
package mainimport "fmt"func main() {var a bool = truevar b bool = false//当a或者b其中一个为真那么结果为真,if a || b {//那么我们输出为 truefmt.Println(a)}
//输出结果: true
}
逻辑非!
非也,也可以理解取反,表示否定的意思
package mainimport "fmt"func main() {var a bool = truevar b bool = false//非b 那么!b=tureif !b {//那么我们输出为 a,因为a=truefmt.Println(a)}
//输出结果: true
}
位运算符(二进制)
运算符 | 描述 | 实例 |
---|---|---|
& | 按位与运算符"&"是双目运算符。都是1结果为1,否则是0 | (A&B)结果为12,二进制为0000 1100 |
| | 按位或运算符"|"是双目运算符。都是0结果为0,否则是1 | (A |B)结果为61,二进制0011 1101 |
^ | 按位异或运算符"A"是双目运算符。不同则为1,相同为0 | (A^B)结果为49,二进制为0011 0001 |
&^ | 位清空,a &^b,对于b上的每个数值,如果为0,则取a对应位上的数值,如果为1,则取0. | (A&^B)结果为48,二进制为0011 0000 |
<< | 左移运算符"<<"是双目运算符。左移n位就是乘以2的n次方。其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补O。 | A<<2结果为240,二进制为1111 0000 |
>> | 右移运算符">>"是双目运算符。右移n位就是除以2的n次方。其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。 | A>>2结果为15,二进制为0000 1111 |
package mainimport "fmt"func main() {// 二进制 逢二进一//位运算:二进制// 60 0011 1100// 13 0000 1101//----------------进行&运算// 12 0000 1100 我和你 同时满足//----------------进行|运算// 61 0011 1101 我或你 一个满足即可// 49 0011 0001 不同为1 相同为0var a uint = 60var b uint = 13//与运算结果fmt.Printf("%d,二进制:%b\n", a&b, a&b)//或运算结果fmt.Printf("%d,二进制:%b\n", a|b, a|b)//非运算结果fmt.Printf("%d,二进制:%b\n", a^b, a^b)//a向左移动两位// 60 0011 1100// 移动之后 1111 0000fmt.Printf("左移动后后的十进制:%d,左移动后的二进制:%b\n", a<<2, a<<2)//a向右移动两位// 60 0011 1100// 移动之后 0000 1111fmt.Printf("右移动后后的十进制:%d,右移动后的二进制:%b\n", a>>2, a>>2)/*输出结果:12,二进制:110061,二进制:11110149,二进制:110001左移动后后的十进制:240,左移动后的二进制:11110000右移动后后的十进制:15,右移动后的二进制:1111*/
}
赋值运算符
下表列出了所有的Go语言的赋值运算符
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符,将一个表达式的值赋给一个左值 | C =A+B将A+B表达式结果赋值给C |
+= | 相加后再赋值 | C +=A等于C=C+A |
-= | 相减后再赋值 | C -=A等于C=C-A |
*= | 相乘后再赋值 | C *=A等于C=C *A |
/= | 相除后再赋值 | C/=A等于C=C/ A |
%= | 求余后再赋值 | C%=A等于C=C%A |
<<= | 左移后赋值 | C<<=2等于C=C<<2 |
>>= | 右移后赋值 | C>>=2等于C=c>>2 |
&= | 按位与后赋值 | C&=2等于C=C&2 |
^= | 按位异或后赋值 | C=2等于C=C2 |
!= | 按位或后赋值 | C|=2等于C=C|=2 |
package mainimport "fmt"func main() {var A int = 10var B int = 20var C int// 赋值运算符 =C = A + Bfmt.Println(C) //结果为30// 相加后再赋值C += A //注意这里初始值为:C=30 C= C+A=30+10fmt.Println(C)
/*
输出结果:3040*/
}
其他运算符
运算符 | 描述 | 实例 |
---|---|---|
& | 返回变量存储地址 | &a;将给出变量的实际地址 |
* | 指针变量 | *a;是一个指针变量 |
拓展:键盘输入输出
package mainimport "fmt"func main() {var a intvar b float32//定义了两个变量,想用键盘来录入这个两个变量//fmt.Println() 打印并换行//fmt.Printf() 格式化输出//fmt.Printf() 打印输出fmt.Printf("请输入两个数:1.整数 2.浮点数\n")fmt.Scanln(&a, &b)fmt.Printf("输出的两个数的结果为:\n")fmt.Println("a:", a, "b:", b)// fmt.Scanln() 接受输入scan// fmt.Scanf() 接受输入 格式化输入 作业// fmt.Scan() 接受输入 作业}
编码规范
为什么需要代码规范
- 代码规范不是强制的,也就是你不遵循代码规范写出来的代码运行也是完全没有问题的
- 代码规范目的是方便团队形成一个统一的代码风格,提高代码的可读性,规范性和统一性。本规范将从命名规范,注释规范,代码风格和Go语言提供的常用的工具这几个方面做一个说明。
- 规范并不是唯一的,也就是说理论上每个公司都可以制定自己的规范,不过一般来说整体上规范差异不会很大。
代码规范
命名规范
命名是代码规范中很重要的一部分,统一的命名规则有利于提高的代码的可读性,好的命名仅仅通过命名就可以获取到足够多的信息。
- 当命名(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的public) ;
- 命名如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的private )
包名:package
保持package的名字和目录名保持一致,尽量采取有意义的包名,简短,有意义,尽量和标准库不要冲突。包名应该为小写单词,不要使用下划线或者混合大小写。
package model
package main
文件名
尽量采取有意义的文件名,简短,有意义,应该为小写单词,使用下划线分隔各个单词(蛇形命名)。
Go语言笔记—Go基础语法(2)相关推荐
- java基本语法心得_Java学习笔记(一)——基础语法(上)
Java学习笔记(一)--基础语法(上) 软件构造 写在前面 编写Java程序时,应注意以下几点:大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hello是不同的. 类名:对于所有的 ...
- C语言笔记-22-Linux基础-信号
C语言笔记-22-Linux基础-信号 文章目录 C语言笔记-22-Linux基础-信号 前言 一.信号概括 二.信号函数 三.信号的产生 pause 阻塞线程 四.信号掩码集和未决信号集 五.设置阻 ...
- python学习笔记:基础语法
目录 python语言概述 python基础语法 python标准数据类型 1.数字类型 2.字符串类型 3.列表类型 4.元组 5.字典 python基础语法 1.条件判断语句 2.循环语句 3.函 ...
- Go语言学习笔记—golang基础语法
视频来源:B站<golang入门到项目实战 [2022最新Go语言教程,没有废话,纯干货!]> 文章为自己整理的学习笔记,侵权即删,谢谢支持! 文章目录 golang基础语法 一.gola ...
- Go语言学习笔记之基础语法(一)
目录 1. Go语言介绍 Go语言是什么 Go语言优势 Go适合用来做什么 2. Go环境搭建 通过Sublime 编译运行go程序 学习资料 3. 第一个Go程序 通过命令行运行程序 4. 基础语法 ...
- 【转载】阿秀的求职笔记:基础语法篇
本专栏内容均为复习笔试面试阶段学习的文章,部分加上了自己的注释,文章注明转载!! 为了自己更好理解+查看方便+督促自己每天学习 [争取日更25条] 重要的事情说三遍 欢迎大家去 阿秀的求职笔记 学习! ...
- Java学习笔记之基础语法(一)
目录 前言 一.基础语法 基础概念 运算符 数据输入Scanner 条件判断 循环 Random 二.IDEA安装与使用 IDEA项目结构介绍 IDEA中HelloWorld步骤 IDEA快捷键 前言 ...
- Python学习笔记(2)-基础语法
1 ########### python基础语法 ################### 2 3 #标识符 4 #第一个字符必须是字母表中字母或下划线-- 5 #标识符的其他部分有字母,数字和下划线组 ...
- Scala语言学习一——基础语法
什么是 Scala Scala 是一种多范式的编程语言, 其设计的初衷是要集成面向对象编程和函数式编程的各种 特 性 . Scala 运 行 于 Java 平 台 (Java 虚 拟 机 ) , 并 ...
最新文章
- python 错误--UnboundLocalError: local variable '**' referenced before assignment
- oracle:connect by start
- jdbcTemplate 后台接口中的分页
- iccv2020论文汇总_ICCV2019 最佳论文出炉,附1987~2019历届ICCV最佳论文汇总( 提供下载)...
- 关于软件组织培训的几个值得提倡的建议
- 看得懂的设计模式 享元模式python3 最基本(简单)实现
- Socket网络编程--小小网盘程序(3)
- ECS 游戏框架背景知识
- YII 规则rule 里面 min,max 提示错误信息
- Excel中 插入 对号等特殊字符
- 重大网络教育计算机基础章节答案,网络教育计算机基础1答案
- linux gnu编译器下载,GNU Compiler Collection(gcc编译器)下载_GNU Compiler Collection(gcc编译器)官方下载-太平洋下载中心...
- 大学计算机基础word操作2018,大学计算机基础试题及答案2017
- msm8953 lk阶段lcd流程
- erlang的逗号和分号和句号区别
- 微信公众号支付、支付查询、退款、退款查询、转账到零钱银行卡、转账查询接口整合(V2)
- 对宇宙起源的一个现代猜想-重生而非诞生
- Android 手机上获取手机当前上网IP地址(手机网关给手机号分配的IP)
- 获取buff市场的价格
- 【组合数学】通俗解释 Burnside引理和Polya定理