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. Python学习---高阶函数的学习

    高阶函数 高阶函数:函数名可以作为参数传递输入,函数名还可以作为返回值返回 函数名可以重新赋值,因为其本身就是一个变量    函数本身就是一个对象,    函数的变量名f本身就是指向函数本身的,加上括 ...

  2. gmock使用、原理及源码分析

    1      初识gmock 1.1      什么是Mock 便捷的模拟对象的方法. 1.2      Google Mock概述 google mock是用来配合google test对C++项目 ...

  3. 039条件变量同步(Condition)

    也是锁,这个锁多加了wait(),notify()唤醒一个进程,notifyall()唤醒全部进程方法,创建的时候默认是Rlock类型的锁,可以设置为lock类型的,默认就ok from random ...

  4. 迷宫问题求解——C++

    迷宫问题思路 根据昨天的博客,有如下几种解决方案 克鲁斯卡尔 ,为避免死循环,需要设定优化路径的次数. Prim,为避免死循环,需要设定优化路径的次数,暂定200次. BFS , 实现简单,无死循环. ...

  5. 理解JavaScript中的去抖函数

    何为去抖函数?在学习JavaScript去抖函数之前我们需要先弄明白这个概念.很多人都会把去抖跟节流两个概念弄混,但是这两个概念其实是很好理解的. 去抖函数(Debounce Function),是一 ...

  6. gulp使用方法总结

    gulp是用于前端构建的基于文件流的一套工具.可以用于压缩.编译.合并.检查文件等操作.可以节省大量的用于繁琐重复操作的人力.最开始就是安装gulp工具了,在命令行中切换到工作的文件目录下,安装gul ...

  7. CRUD是什么?数据结构、增查删改

    http://blog.csdn.net/penginpha/article/details/6920444 CRUD是指在做计算处理时的增加(Create).查询(Retrieve)(重新得到数据) ...

  8. Linux学习总结(二) 网络配置-NAT方式静态IP配置篇

    一:DHCP 服务验证 1: 之前我们在里面已经装好了centos,当时我们选择的组网方式为NAT方式,那么我们怎么样如何快速实现虚拟机系统访问外网呢?能不能直接上网呢,来我们试一下ping baid ...

  9. 从零一起学Spring Boot之LayIM项目长成记(一) 初见 Spring Boot

    项目背景 之前写过LayIM的.NET版后端实现,后来又写过一版Java的.当时用的是servlet,websocket和jdbc.虽然时间过去很久了,但是仍有些同学在关注.偶然间我听说了Spring ...

  10. Mac python3.5 + Selenium 开发环境配置

    一. python 3.5 1. 下载 2. Mac默认为2.7,所以这里主要介绍如何将系统Python默认修改为3.5. 原理: 1)Mac自带的python环境在: python2.7: /Sys ...