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

}

它的构成如下:

  1. func开始一个函数的声明。
  2. 函数名称(function_name):这是函数的名称。函数名和参数列表一起构成函数签名。
  3. 参数:参数类似于占位符。 调用函数时,将一个值传递给参数。 此值称为实际参数或参数。 参数列表指的是函数的参数的类型,顺序和数量。 参数是可选的; 即,函数可以不用包含参数。
  4. 返回类型:函数可以有返回值列表。return_types是函数返回的值的数据类型的列表。某些函数执行所需的操作,而不用(无)返回值。在这种情况下,return_type就不是必需的。
  5. 函数体:函数体包含定义函数的功能的语句集合。

调用函数

调用函数比较简单,只需要传递所需的参数以及函数名称,如果函数返回一个值,那么可以存储返回的值。

示例:

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语言中的变量、常量、数据类型、流程控制以及函数的更多相关文章

  1. C#基础课程之二变量常量及流程控制

    课堂练习:.一个四位整数 输出它的千位,百位,十位,个位 数字. ; ; % ; % ; ; Console.WriteLine("千位数" + b+" 百位数" ...

  2. 二、 java中的变量与数据类型及类型转换

    标识符:凡是可以自己命名的地方都叫标识符,如:类名.方法名.接口名... 1.标识符命名的规则: 由26个英文字母大小写,0-9,_或$组成,不遵守会报错. 不可以用数字开头. 不能使用关键字和保留字 ...

  3. Go语言学习之3 流程控制、函数

    主要内容: 1. strings和strconv使用2. Go中的时间和日期类型3. 指针类型4. 流程控制5. 函数详解 1. strings和strconv使用 //strings . strin ...

  4. flutter--Dart基础语法(二)流程控制、函数、异常

    一.前言 Flutter 是 Google 开源的 UI 工具包,帮助开发者通过一套代码库高效构建多平台精美应用,Flutter 开源.免费,拥有宽松的开源协议,支持移动.Web.桌面和嵌入式平台. ...

  5. 使用 JavaScript 中的变量、数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算符的不同位置得到不同的结果

    查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的变量.数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算 ...

  6. R语言入门二

    一.R语言应知常用函数 1.getwd() 函数:获取工作目录(同eclipse设置workspace类似),直接在R软件中使用,如下图: 2.setwd(dir=”工作目录”) 函数:设置R软件RS ...

  7. 【R语言入门】R语言中的变量与基本数据类型

    说明 在前一篇中,我们介绍了 R 语言和 R Studio 的安装,并简单的介绍了一个示例,接下来让我们由浅入深的学习 R 语言的相关知识. 本篇将主要介绍 R 语言的基本操作.变量和几种基本数据类型 ...

  8. 【C语言】二维数组中的查找,杨氏矩阵

    //二维数组中的查找,杨氏矩阵 //在一个二维数组中,每行都依照从左到右的递增的顺序排序.每列都依照从上到下递增的顺序排序. //请完毕一个函数.输入这种一个数组和一个数,推断数组中是否包括这个数. ...

  9. 【c语言】二维数组中的查找,杨氏矩阵在一个二维数组中,每行都依照从左到右的递增的顺序排序,输入这种一个数组和一个数,推断数组中是否包括这个数

    // 二维数组中的查找,杨氏矩阵在一个二维数组中.每行都依照从左到右的递增的顺序排序. // 每列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个数组和一个数.推断数组中是否包括这个数 #i ...

随机推荐

  1. Azkaban3.X的安装(2018年8月19日最新版本)

    参考文章: 1.http://azkaban.github.io/azkaban/docs/latest/ 2.http://blog.csdn.net/gaoqida/article/details ...

  2. CSAPP buffer lab记录——IA32版本

    CSAPP buffer lab为深入理解计算机系统(原书第二版)的配套的缓冲区溢出实验,该实验要求利用缓冲区溢出的原理解决5个难度递增的问题,分别为smoke(level 0).fizz(level ...

  3. Bootstrap Multiselect

    Getting Started Link the Required Files First, the jQuery library needs to be included. Then Twitter ...

  4. django 静态文件

    django 1.8版本以上 django 静态文件配置. 小作之前, 一直觉得django的静态文件配置非常的麻烦. 1. 要设置url(r'^static/(?P<path>.*)&a ...

  5. JavaScript小游戏--2048(PC端)

    1.初始化棋局 $(document).ready(function() { prepare_for_mobile(); //适配移动端 new_game(); }); 2.开始新游戏 functio ...

  6. MS12-020蓝屏攻击

    MS12-020远程桌面协议RDP拒绝访问漏洞 条件:受害者必须开放RDP协议 开放了3389端口 或者端口改了,知道对方RDP开放的对应端口. 过程:MSF利用 MSF显示为seems down说明 ...

  7. python中模块与包的概念

    在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护.为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多 ...

  8. MVC 实现下拉框

    MVC动态实现下拉框的方式有很多种,但是方便快捷的却是很少,现在记录一种常用的下拉框实现方式: 1.先看看视图代码是怎么写的 <div class="form-group col-xs ...

  9. 【题解】洛谷P1541 [NOIP2010TG] 乌龟棋(类似背包的DP)

    题目来源:洛谷P1541 思路 类似背包的题 总之就是四种卡牌取的先后顺序不同导致的最终ans不同 所以我们用一个四维数组每一维分别表示第几种取了几张的最大分数 然后就是简单DP解决 代码 #incl ...

  10. Xcode命令行作用

    问题:Command Line Tools for Xcode有什么用 答案: Command Line Tools里面有git, xcrun, xcodebuild, gcc, gdb, make等 ...