Go语言入门(二)Go语言中的变量、常量、数据类型、流程控制以及函数
Go语言中的变量
通常用var关键声明变量,有常规方式和简化方式。
常规方式:
var name1 type1
name1 = value1 //赋值
简化方式:
var name2 = value1 //根据右边的值自动判断类型
更简便(偷懒)的写法是连var不要了,如:
name3 := value3
go支持多变量声明:
var name1, name2, name3 type
name1, name2, name3 = value1, value2, value3
或者这样:
name1, name2, name3 := value1, value2, value3
如果用简化方式声明变量,和java相比,简直是方便太多了。
常量
用const关键字声明,格式是:
const name [type] = value
Go的常量定义可以限定常量类型,但不是必需的。如果定义常量时没有指定类型,那它是无类型常量。只要这个常量在相应类型的值域范围内,就可以作为该类型的常量.
示例:
const Height = 880
const Width int64 = 300
const (
id = 007
age = 45
)
数据类型
分为两大类:
1、基本数据类型:数值类型(包括整型、浮点型等)、布尔型、字符串类型
2、复合数据类型:数组、slice、map、结构体
数值类型
布尔型
由两个预定义常量组成:(a)true(b)false
字符串类型
字符串类型表示字符串值的集合。它的值是一个字节序列。 字符串是不可变的类型,一旦创建后,就不可能改变字符串的内容。预先声明的字符串类型是string。
如:str := “let’s go”
数组
和java不同,要留意类型的摆放位置等细节。
一维数组:
var arr = [5]byte {'a', 'b', 'c', 'd', 'e'}
arr := [5]byte {'a', 'b', 'c', 'd', 'e'}
二维数组:
var arr = [2][4]int{ [4]int{1, 2, 3}, [4]int{4, 5, 6} }
var arr = [2][4]int{ {1, 2, 3}, {4, 5, 6} }
访问数组元素
通过索引数组名称来访问元素。这是通过将元素的索引放在数组名称后的方括号内。 例如访问第3个元素的值:
float32 salary = balance[2]
slice(切片)
Go切片(Slice)是Go数组的一个抽象。 由于Go数组允许定义类型的变量,可以容纳相同数据类型的几个数据项,但它不提供任何内置的方法来动态增加其大小或获取自己的子数组。切片就没有这样的限制。 它提供了数组所需的许多实用功能,并广泛用于Go编程。
切片的声明
和数组类似,只是不指定大小或使用make函数创建一个。
var numbers [ ]int
numbers = make([ ]int,5,5)
map(字典)
map是一种无序的键值对的集合。map最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。
声明map:
// 方式 1. 声明变量,默认map是nil
var map_name = map[type]type
// 方式2. 使用make创建
map_name := make(map[type]type)
map的使用:
// 增加或修改key=123对应的元素值为字符型"123"
myMap[123] = "123"
// 删除key=123对应的元素
delete(myMap,123)
// 查找key=123对应的元素,该操作有两个返回值
// 返回值1为对应的值,返回值2为是否包含该key
v, ok := myMap[123]
结构体
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体有中有一个或多个成员。type 语句设定了结构体的名称。结构体的格式如下:
type struct_variable_type struct {
member definition;
member definition;
...
member definition;
}
一旦定义了结构体类型,它就能用于变量的声明,语法格式如下:
variable_name := structure_variable_type {
value1, value2...valuen
}
或
variable_name := structure_variable_type {
key1: value1, key2: value2..., keyn: valuen
}
访问结构体中的字段:
使用点 . 操作符来访问结构体中的字段。
示例:
package main
import (
"fmt"
)
type Employee struct {
firstName, lastName string
age, salary int
}
func main() {
emp6 := Employee{"Sam", "Anderson", 55, 6000}
fmt.Println("First Name:", emp6.firstName)
fmt.Println("Last Name:", emp6.lastName)
fmt.Println("Age:", emp6.age)
fmt.Printf("Salary: $%d", emp6.salary)
}
输出:
First Name: Sam
Last Name: Anderson
Age: 55
Salary: $6000
流程控制
分为四种类型:
▪ 条件语句:关键字为if、else和else if。
▪ 选择语句:关键字为switch、case和select。
▪ 循环语句:关键字为for和range。
▪ 跳转语句:关键字为goto。
1、条件语句
if condition {
...
}
if condition {
...
} else {
...
}
if condition {
...
} else if condition {
...
}
注意:
▪ 条件语句不需要使用括号()将条件包含起来。
▪ 条件语句的左花括号{必须与if或else同处一行,条件语句的else必须和上一个语句体结束的右花括号}同处一行,否则会出现编译错误。
▪ 条件语句在if之后可以添加变量初始化语句,但要使用分号;间隔,如:
if a := 1; a >= 1 {
fmt.Println("OK")
}
2、选择语句
switch condition {
case v0:
...
case v1:
...
case v2:
...
case v3:
...
case v4, v5, v6:
...
default:
...
}
注意:
▪ 选择语句中,左花括号{必须与switch同处一行。
▪ 选择语句中,case后可以使用常量,还可以使用变量。
▪ 选择语句中,单个case后可以出现多个结果选项。
▪ 选择语句中,每个case后面默认有break关键字,不需要显式声明。
3、循环语句
有三种循环:
// a.普通循环
for i := 0; i < N; i++ {
...
}
// b.数组、切片、map循环
for i, v := range array {
...
}
for k, v := range map{
...
}
// c.无限循环
for {
...
}
注意:
▪ 循环语句只支持for结构,不支持while和do-while结构。
▪ 循环语句左花括号{必须与for处于同一行。
4、跳转语句
跳转语句是指跳转到本函数内的某个标签处执行,语法如下:
goto label
示例:
package main
import "fmt"
func main() {
i := 0
for {
i++
if i >= 10 {
goto finish
}
}
finish:
fmt.Println("Finish")
}
函数
定义函数
func function_name( [parameter list] ) [return_types]{
body of the function
}
它的构成如下:
- func开始一个函数的声明。
- 函数名称(function_name):这是函数的名称。函数名和参数列表一起构成函数签名。
- 参数:参数类似于占位符。 调用函数时,将一个值传递给参数。 此值称为实际参数或参数。 参数列表指的是函数的参数的类型,顺序和数量。 参数是可选的; 即,函数可以不用包含参数。
- 返回类型:函数可以有返回值列表。return_types是函数返回的值的数据类型的列表。某些函数执行所需的操作,而不用(无)返回值。在这种情况下,return_type就不是必需的。
- 函数体:函数体包含定义函数的功能的语句集合。
调用函数
调用函数比较简单,只需要传递所需的参数以及函数名称,如果函数返回一个值,那么可以存储返回的值。
示例:
package main
import "fmt"
//定义函数
func max(num1, num2 int) int {
var result int
if (num1 > num2) {
result = num1
} else {
result = num2
}
return result
}
func main() {
var a int = 100
var b int = 200
var ret int
//调用函数
ret = max(a, b)
fmt.Printf( "Max value is : %d\n", ret )
}
输出:
Max value is : 200
Go语言入门(二)Go语言中的变量、常量、数据类型、流程控制以及函数的更多相关文章
- C#基础课程之二变量常量及流程控制
课堂练习:.一个四位整数 输出它的千位,百位,十位,个位 数字. ; ; % ; % ; ; Console.WriteLine("千位数" + b+" 百位数" ...
- 二、 java中的变量与数据类型及类型转换
标识符:凡是可以自己命名的地方都叫标识符,如:类名.方法名.接口名... 1.标识符命名的规则: 由26个英文字母大小写,0-9,_或$组成,不遵守会报错. 不可以用数字开头. 不能使用关键字和保留字 ...
- Go语言学习之3 流程控制、函数
主要内容: 1. strings和strconv使用2. Go中的时间和日期类型3. 指针类型4. 流程控制5. 函数详解 1. strings和strconv使用 //strings . strin ...
- flutter--Dart基础语法(二)流程控制、函数、异常
一.前言 Flutter 是 Google 开源的 UI 工具包,帮助开发者通过一套代码库高效构建多平台精美应用,Flutter 开源.免费,拥有宽松的开源协议,支持移动.Web.桌面和嵌入式平台. ...
- 使用 JavaScript 中的变量、数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算符的不同位置得到不同的结果
查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的变量.数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算 ...
- R语言入门二
一.R语言应知常用函数 1.getwd() 函数:获取工作目录(同eclipse设置workspace类似),直接在R软件中使用,如下图: 2.setwd(dir=”工作目录”) 函数:设置R软件RS ...
- 【R语言入门】R语言中的变量与基本数据类型
说明 在前一篇中,我们介绍了 R 语言和 R Studio 的安装,并简单的介绍了一个示例,接下来让我们由浅入深的学习 R 语言的相关知识. 本篇将主要介绍 R 语言的基本操作.变量和几种基本数据类型 ...
- 【C语言】二维数组中的查找,杨氏矩阵
//二维数组中的查找,杨氏矩阵 //在一个二维数组中,每行都依照从左到右的递增的顺序排序.每列都依照从上到下递增的顺序排序. //请完毕一个函数.输入这种一个数组和一个数,推断数组中是否包括这个数. ...
- 【c语言】二维数组中的查找,杨氏矩阵在一个二维数组中,每行都依照从左到右的递增的顺序排序,输入这种一个数组和一个数,推断数组中是否包括这个数
// 二维数组中的查找,杨氏矩阵在一个二维数组中.每行都依照从左到右的递增的顺序排序. // 每列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个数组和一个数.推断数组中是否包括这个数 #i ...
随机推荐
- npm安装及webpack打包小demo
node(node.js) 安装 1.先从https://segmentfault.com/a/1190000004245357网站下载x64位的安装包node-v4.8.1-linux-x64.ta ...
- WIN7与WIN10 安装
---恢复内容开始--- 开始的操作系统是黑白屏的DOS,随着光标的一闪一闪并逐渐后移,一条条指令输入电脑,并执行相关指令完成任务.慢慢的,视窗操作系统最初是基于DOS的windows 9X内核WIN ...
- DedeCms织梦后台管理员密码修改和忘记重置方法
方法/步骤 打开dede_admin数据表: 进入你的MYSQL后台,然后在你的数据库名中,找到dede_admin这项如图,pwd下的值就是你的密码,织梦密码采取的是MD5加密,破解麻烦而且没有必要 ...
- windows server 2003安装Oracle webtier 32位因环境变量原因报错
在服务中启动Oracle processer manager时报错:错误1053:服务没有及时响应启动或控制请求 原因是本系统还安装过BI和Oracle数据库等产品 解决方法:删除和本次安装无关的环境 ...
- 入门摄影——尼康DX
学习链接 单反应当怎样入门? - Williams的回答 - 知乎 [摄影教程]尼康数码单反相机使用视频教程_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 图像品质与图像大小 图像品质:暂选JP ...
- API代理网关和OAuth2.0授权认证框架
API代理网关和OAuth2.0授权认证框架 https://www.cnblogs.com/bluedoctor/p/8967951.html 1,授权认证与微服务架构 1.1,由不同团队合作引发的 ...
- PHP面向对象(OOP)编程入门教程链接
PHP官方学习OOP: http://php.net/manual/zh/oop5.intro.php 从其他博主学习:(以下链接来源: http://blog.snsgou.com/post-41. ...
- nrf52840蓝牙BLE5.0空中数据解析
一.基础知识: 我没找到蓝牙5.0的ATT数据格式图片,在蓝牙4.0的基础上做修改吧,如下图所示: 二.测试与分析: 参数设置: data length = 251字节,MTU = 247字节, ...
- Kali-linux基本设置
1.6.1 启动默认的服务 Kali Linux自带了几个网络服务,它们是非常有用的.但是默认是禁用的.在这里,将介绍使用各种方法设置并启动每个服务. 1. 启动Apache服务 启动Apache服务 ...
- 学会WCF之试错法——超时
服务契约 [ServiceContract] public interface IService { [OperationContract] string GetData(int value); [O ...