Go开发之路 -- Go语言基本语法
一. 变量
1.1 变量的声明
Go 语言的每一个变量都拥有自己的类型,必须经过声明才能开始用。
标准格式:
var 变量名 变量类型
变量的声明以关键字 var 开头,行尾不需要写分号
常见变量的数据类型有:整型、浮点型、布尔型、结构体等。
例如:
var a int
var b string
var c []float32
var d func() bool
var e struct{
x int
}
代码说明:
- 第1行,声明一个整型类型的变量,可以保存整数数值。
- 第2行,声明一个字符串类型的变量。
- 第3行,声明一个 32 位浮点切片类型的变量,浮点切片表示由多个浮点类型组成的数据结构。
- 第4行,声明一个返回值为布尔类型的函数变量,这种形式一般用于回调函数,即将函数以变量的形式保存下来,在需要的时候重新调用这个函数。
- 第5行,声明一个结构体类型的变量,这个结构体拥有一个整型的 x 字段。
优雅格式声明(推荐):
var (
a int
b string
c []float32
d func() bool
e struct {
x int
}
)
使用关键字var和括号,可以将一组变量定义放在一起。
1.2 变量的初始化
变量的声明可以包含初始值,每一个变量对应一个值。
如果初始化值已存在,则可以省略类型;变量会从初始值中获得类型。
变量初始化的标准格式:
var 变量名 类型 = 表达式
简化形式:
var 变量名 = 表达式
例如:
var x int = 100
可以写成:
var x = 100
默认值:
没有明确初始值的变量声明会被赋予它们一个默认值:
整型和浮点型变量的默认值为 0。
字符串变量的默认值为空字符串。
布尔型变量默认为 bool。
切片、函数、指针变量的默认为 nil。
1.3 短变量声明并初始化
在函数中,简洁赋值语句 := 可在类型明确的地方代替 var 声明。
注意:函数外的每个语句都必须以关键字开始(var
等),因此 :=
结构不能在函数外使用。
例如:
x := 100
编译器会自动根据右值类型推断出左值的对应类型。
注意:由于使用了 :=
,而不是赋值的 =
,因此推导声明写法的左值变量必须是没有定义过的变量。若定义过,将会发生编译错误。
注意:在多个短变量声明和赋值中,至少有一个新声明的变量出现在左值中,即便其他变量名可能是重复声明的,编译器也不会报错,例如:
x, z := a, b
y, z := a, b
1.4 多个变量同时赋值
使用Go的“多重赋值特性”,可以轻松完成变量交换的任务。
package main
import "fmt" func main() {
var a = 100
var b = 200
a, b = b, a
fmt.Println(a, b)
}
多重赋值时,变量的左值和右值按从左到右的顺序赋值。
1.5 匿名变量(_)
在使用多重赋值时,如果不需要在左值中接收变量,可以使用匿名变量。
匿名变量用一个下划线 _ 来表示
,使用匿名变量时,只需要在变量声明的地方使用下划线替换即可。例如:
var a int
a, _ = 100, 200
注意:匿名变量不占用命名空间,不会分配内存。匿名变量与匿名变量之间也不会因为多次声明而无法使用。
二. 常量
常量是恒定不变的值,例如圆周率。
常量的声明与变量类似,只不过是使用 const 关键字。
常量可以是字符、字符串、布尔值和数值。
常量不能用 := 语法声明。
常量的声明, 例如:
const pi = 3.1415926
注意:常量在声明的时候必须赋值。
多个变量可以一起声明,类似的,多个变量也可以一起声明。例如:
const (
pi = 3.1415926
e = 2.718281
)
三. 基本数据类型
Go语言中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有切片、结构体、函数、map、通道(channel)等。
Go 语言的基本类型和其他语言大同小异。
3.1 整型
整型可以分成以下两个大类:
按长度分为:int8、int16、int32、int64
对应的无符号整型:uint8、uint16、uint32、uint64
其中,uint8 就是我们熟知的 byte 型.
3.2 浮点型
Go语言支持两种浮点型数:
float32、float64.
注意:没有float
Go语言的浮点型默认声明为float64.
3.3 布尔型
布尔型数据只有 true(真)和 false(假)两个值。
注意:
在Go语言中, true和false均为小写 不允许将整型强制转换为布尔型
3.4 字符串
字符串的两种表示形式:
1. 双引号,会识别转义字符
2. 反引号,不会识别转义字符。以字符串的原生形式输出,包括换行和特殊字符。
3.4.1 字符串常见转义符
转义符 | 含义 |
\r | 回车符(返回行首) |
\n | 换行符 |
\t | 制表符 |
\' | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
3.4.2 反引号定义多行字符串
const str = ` 第一行
第二行
第三行
\r\n
`
fmt.Println(str)
代码运行结果:
第一行
第二行
第三行
\r\n
3.5 字符
字符串中的每一个元素叫做“字符”,在遍历或者单个获取字符串元素时可以获得字符。
Go语言的字符有以下两种:
- 一种是 uint8 类型,或者叫 byte 型,代表了 ASCII码的一个字符。
- 另一种是 rune 类型,代表一个 UTF-8 字符。当需要处理中文、日文或者其他复合字符时,则需要用到 rune 类型。rune 类型实际是一个 int32。
四. 数据类型的转换
Go语言使用类型前置加括号的方式进行类型转换,一般格式如下:
T(表达式)
其中,T 代表要转换的类型。表达式包括变量、复杂算子和函数返回值等。
注意:在类型转换时,需要考虑两种类型的关系和范围,是否会发生数值截断等。
package main import "fmt" func main(){
var n1 int = 20
var n2 float64 = float64(n1) n2 = n2 + 3.6 var n3 int32 = int32(n2) // 当将一个float类型转成 int时,是直接去掉小数点后的部分 fmt.Printf("n1 type=%T, val=%v; n2 type=%T, val=%v; n3 type=%T, val=%v\n",
n1, n1, n2, n2, n3, n3)
}
代码运行结果:
n1 type=int, val=20; n2 type=float64, val=23.6; n3 type=int32, val=23
Go开发之路 -- Go语言基本语法的更多相关文章
- Go开发之路 -- Go语言基本语法 - 作业
1. 判断101 - 200之间有多少个素数,并输出所有素数. package main import ( "fmt" ) var count = 0 func prime(a, ...
- 饿了么基于Vue2.0的通用组件开发之路(分享会记录)
Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库.今天我们要分享的就是开发 Element 的一些心得. 官网 ...
- WEB开发之路——基础部分
WEB开发之路 受BBC的<BBC: Brain Story>和<BBC: The Brain - A Secret History>的影响,我一直有志于探究人类大脑,2015 ...
- 踏上Revit二次开发之路 1 准备工作
1 准备工作 工欲善其事,必先利其器.在正式开始之前,我觉得有必要先盘点一下需要准备些什么. 1.1 硬件设备 PC机一台(谢绝Apple). 配置不能太低,至少要i3以上的cpu.4g以上的内存和支 ...
- 李洪强iOS开发之【零基础学习iOS开发】【02-C语言】02-第一个C语言程序
前言 前面已经唠叨了这么多理论知识,从这讲开始,就要通过接触代码来学习C语言的语法.学习任何一门语言,首先要掌握的肯定是语法.学习C语言语法的目的:就是能够利用C语言编写程序,然后运行程序跟硬件(计算 ...
- 李洪强iOS开发之零基础学习iOS开发】【02-C语言】01-概述
前面已经给大家介绍了iOS开发相关的一些基础知识,其实iOS开发就是开发iPhone\iPad上的软件,而要想开发一款软件,首先要学习程序设计语言.iOS开发需要学习的主要程序设计语言有:C语言.C+ ...
- python 全栈开发之路 day1
python 全栈开发之路 day1 本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...
- 小强的HTML5移动开发之路(13)——HTML5中的全局属性
来自:http://blog.csdn.net/dawanganban/article/details/18179483 一.accssskey 快捷键 <!DOCTYPE HTML> ...
- 小强的HTML5移动开发之路(11)——链接,图片,表格,框架
来自:http://blog.csdn.net/dawanganban/article/details/18098193 一.HTML是什么? HTML(hypertext mark-uplangua ...
随机推荐
- 【sql注入】浅谈sql注入中的Post注入
[sql注入]浅谈sql注入中的Post注入 本文来源:i春秋学院 00x01在许多交流群中,我看见很多朋友对于post注入很是迷茫,曾几何,我也是这样,因为我们都被复杂化了,想的太辅助了所以导致现在 ...
- vue组件推荐
Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可.在公司的Web前端项目开发中,多个项目采用基于Vue的UI组件框架开发,并投入正 ...
- Python爬虫1-使用urlopen
GitHub代码练习地址:https://github.com/Neo-ML/PythonPractice/blob/master/SpiderPrac01_urlopen.py 爬虫简介- 爬虫定义 ...
- 第48节:Java当中的集合框架
Java当中的集合框架 01 在我们班里有50位同学,就有50位对象. // 简书作者:达叔小生 Student[] stus = new Student[20]; 结果来了一位插班生,该同学因为觉得 ...
- JSTL 和 EL
EL表达式 Expression Language 语法${作用域中的值} 使用EL表达式时,需要在page标签中写上isELIgnored="false",否则EL表达式不生 ...
- Scala - 快速学习06 - 面向对象
1- 类 1.1- 简介:类.方法及对象 类是用来创建对象的蓝图. Scala文件中包含的多个类之间,都是彼此可见的,不需要声明为public. 创建对象 定义好类以后,就可以使用new关键字来创建对 ...
- Android内存管理篇 - adj的概念与进程adj级别控制
本文主要介绍Android的lowmemorykiller的oom_adj的相关概念,以及根据一些案例来阐述了解oom_adj对于做Android应用开发的重要意义. 一.lowmeorykiller ...
- 全网最详细的最新稳定OSSEC搭建部署(ossec-server(CentOS7.X)和ossec-agent(CentOS7.X))(图文详解)
不多说,直接上干货! 前言 写在前面的话,网上能够找到一些关于ossec方面的资料,虽然很少,但是总比没有强,不过在实际的使用过程中还是会碰到许多稀奇古怪的问题.整理整理我的使用过程,就当做一篇笔记吧 ...
- 01 Windows安装Tensorflow
1.安装Python. 点击此处下载Python3.5.2.安装Python时一定要选择安装pip. 2.配置Python环境变量. 将%安装路径%\Scripts添加到Path下面. 3.修改Pip ...
- ui2code中的深度学习+传统算法应用
背景 在之前的文章中,我们已经提到过团队在UI自动化这方面的尝试,我们的目标是实现基于 单一图片到代码 的转换,在这个过程不可避免会遇到一个问题,就是为了从单一图片中提取出足够的有意义的结构信息,我们 ...