golang学习笔记:golang 语法篇(二)

在语法篇(一)中学习了go中基本的数据类型、变量、常量等组成语言的基本要素,在这一节中将会学习如何将这些元素组织起来,最终写成可以执行的代码。

在这一部分包括:

go中的流程控制语句;

go中函数的用法;

go特殊的错误处理方式;

Golang中的流程控制语句

在具体编程的时候免不了需要使用一些特殊的语句实现某些功能,比如使用循环语句来进行迭代,使用选择语句控制程序的执行方式等。这些语句在任何一门程序设计语言

中都会有支持,golang中除了支持常用的循环,条件选择语句以外,还支持跳转语句,下面分别看看这些语句的使用方式。

条件语句 if ,else if, else,...

用法:

if 	表达式 	{    		  //注意花括号必须要和if 在同一行,包括下面的else 和 {也是;同时表达式不需要使用括号括起来
	程序体                 	 //且无论程序体有几行都需要有花括号,这是和 C 有区别的地方
	. . .
}	else	{
	程序体
	. . .
}

注意,在if之后可以有表达式的赋值操作,之间使用分号隔开。

选择语句 switch

其实和if语句实现的功能类似,只是选择语句更加灵活并可以减少If else的分支开销,和C语言中的switch的使用类似,

switch  表达式	{		//和if语句一样,表达式不需要使用括号,同时switch和 { 在同一行
	case 条件一:
		程序体
	case 条件二:
		程序体
	case ...
	default:
		程序体
}

这里和C语言的一个很大不同是,在每一个case条件的程序体中不需要使用break来强制结束。如果需要执行下面的case语句,那么可以通过添加 fallthrough 关键字来实现。

循环语句for

go中同样支持循环语句,但是与C等其他语言不同的是,go中只支持for来实现循环,不支持使用while。

//使用方式一:最基本的用法
for 变量初始化; 循环结束条件; 变量变化表达式	{
	程序体
	...
}
//使用方式二: 无限循环的情况,类似于C中的for(;;)
for 	{
	程序体
	...
}

同时在for的表达式中允许使用平衡的多重赋值,例如下面的在go中将一个数组逆序的写法:

a := [] int {1,2,3,4,5,6}
for	i, j := 0, len(a)-1; i<j; i, j = i + 1, j - 1 {
	a[i], a[j] = a[j], a[i]
}

注意在go语言中也可以使用break语句。

跳转语句goto

作为初学者,我也不知道为什么Go语言会支持goto这种用法,在早年之前关于goto的弊端,已经被Dijkstra等人发文章集中讨论过,这里不做具体介绍,等以后深入学习之后再来补充,为什么设计者要这样来设计。

上面就是golang支持的四种程序控制语句,为了完成完整的代码,我们还需要函数来进行封装一些特定的功能,下面我们介绍golang中函数的使用方法。

Golang中函数的使用

函数的定义

与其它语言,例如C语言不同的是,Golang中函数的定义如下:
func关键字	函数名	(参数1,参数2,...)	(返回值1,返回值2,...)  {
	函数体
	...
}
// 例如下面的实现两个变量增加的函数:
func	  Add(a int, b int) (ret int, err error) {
	return a+b, nil
}

如果返回值只有一个那么括号可省,如果多个参数的类型相同,那么可省去前面变量的类型。

函数的调用

函数调用的方式是先导入导入包,然后通过包的方式使用函数。

这里需要注意的是,函数名的大小写在golang中是有讲究的,只有大写字母开头的函数才能被其它包使用。而使用小些字母

开头的函数只能在本包内可见。变量名的命名规则类似。

不定参数的支持

在golang中函数同样支持不定参数,即函数可以接受任意类型,任意个数的参数。

例如下面的函数myfunc可以接受任意多个int型的变量作为参数:

func	 myfunc (args ...int) {
	for	_,arg := range args {
		fmt.Println(arg)
	}
}

//在调用时:

myfunc(2,3,4)

mufunc(1,3,7,13)

//如果支持任意类型的参数,那么只需要将int 换成 interface{}  就可以了
func  MyPrintf (args ...interface{}) {
	程序体
	...
}

多返回值

之前已经介绍过了golang的函数是支持多返回值的,如果哪一个返回值是不需要的那么直接可以将对应的值设为缺省就可以了。

匿名函数以及闭包

时间: 2024-12-21 10:15:40

golang学习笔记:golang 语法篇(二)的相关文章

Verilog学习笔记基本语法篇(十二)&#183;&#183;&#183;&#183;&#183;&#183;&#183;&#183; 编译预处理

h Verilog HDL语言和C语言一样也提供编译预处理的功能.在Verilog中为了和一般的语句相区别,这些预处理语句以符号"`"开头,注意,这个字符位于主键盘的左上角,其对应的上键盘字符为"~",这个符号并不是单引号"'".这里简单介绍最常用的`define `include `timescale. 1)宏定义`define 用一个指定的标识符(名字)来代表一个字符串,其的一般形式为: `define 标识符(宏名) 字符串(宏内容) 如:

Verilog学习笔记基本语法篇(二)&#183;&#183;&#183;&#183;&#183;&#183;&#183;&#183;&#183;运算符

Verilog HDL的语言的运算符的范围很广,按照其功能大概可以分为以下几类: (1)算术运算符 +,-,*,/,% 优先顺序 !~ *  /   % +    - <<    >> <    <=  >   >= ==  !==  === !=== & ^  ^~ | && || ?: 最高优先级别 ↓ ↓ ↓ ↓ 最低优先级别 (2)赋值运算符 =,<= (3)关系运算符> ,<,>=,<= (4)

Swift学习笔记(语法篇)-- String与Character类型

一: String概述 不同于Objective-C中的NSString与NSMutableString,在Swift中,存储String类型的数据能否改变,取决于定义数据是var还是let,var是变量,能改变String的长度,增加,修改,删除其中的每一个字符等操作,而let是常量,一旦定义后就不能再修改其内容. Swift的String类型是值类型,如果你创建了一个新的String类型的数据,当它被赋值传递时会进行值拷贝,产生一个副本. 二:Character概述 String其实是作为一

Verilog学习笔记基本语法篇(六)&#183;&#183;&#183;&#183;&#183;&#183;&#183;&#183; 循环语句

在Verilog中存在着4种类型的循环语句,用来控制执行语句的执行次数. 1)forever语句: 连续执行的语句. 2)repeat语句:  连续执行n次的语句. 3)while语句:    执行语句,直至某个条件不满足. 4)for 语句:      三个部分,尽量少用或者不用for循环. 各语句的格式与注意事项: 1)forever格式: forever   语句: 或:forever   begin 多条语句 end 常用于产生周期性的波形,用来作为仿真测试信号.它与always的不同之

Verilog学习笔记基本语法篇(八)&#183;&#183;&#183;&#183;&#183;&#183;&#183;&#183; 结构说明语句

Verilog中的任何过程都可以属于以下四种结构的说明语句; 1) initial;  2) always;  3) task;   4) function; 1) initial说明语句: 一个程序中的 initial 和 always 的次数是不受限制的,他们都是在仿真的一开始同时开始运行的.initial 只执行一次,而 always语句则是不断地重复活动,直到仿真活动结束.但是always 后面的过程快是否运行,则要看他的触发条件是否满足,满足则运行一次,再满足再运行,直至仿真结束. 格

Verilog学习笔记基本语法篇(七)&#183;&#183;&#183;&#183;&#183;&#183;&#183;&#183; 生成块

生成块可以动态的生成Verilog代码.可以用于对矢量中的多个位进行重复操作.多个模块的实例引用的重复操作.根据参数确定程序中是否包含某段代码.生成语句可以控制变量的声明.任务和函数的调用.还能对实例引用进行全面的控制.在编程时,应用关键字generate_endgenerate来说明生成的实例范围. 生成实例可以是一下的以下一种或多种类型: 1)模块 :  2)用户定语原语 : 3)门级原语 :  4)连续赋值语句:   5)initial 和 always 块. 生成实例中语序的数据类型:

jqGrid 学习笔记整理——进阶篇(二)

jqGrid 学习笔记整理--进阶篇(二 ) 本篇开始正式与后台(java语言)进行数据交互,使用的平台为 JDK:java 1.8.0_71 myEclisp 2015 Stable 2.0 Apache Tomcat-8.0.30 Mysql 5.7 Navicat for mysql 11.2.5(mysql数据库管理工具) 一.数据库部分 1.创建数据库 使用Navicat for mysql创建数据库(使用其他工具或直接使用命令行暂不介绍) 2.创建表 双击打开上步创建数据库--右击T

golang学习笔记————字符串

字符串的创建 在golang中 字符串是使用双引号("")包裹住的字符序列: 字符是使用单引号('')包裹住的单一字符: 声明字符串的方式:var strvalue string 声明并创建的方式:strvalue := "This is a string!"; KeyPoint: 一旦字符串变量被初始化后,则不可单独改变该字符串序列中的某一字符:但该字符串变量可以重新被赋值: Ex:   strvalue := "abcd" fmt.Print

ZMAN的学习笔记之Python篇:装饰器

年前工作事务比较繁琐,我只能用零碎的时间继续学习Python,决定开一个系列的博文,作为自己深入学习Python的记录吧.名字也取好了,就叫<ZMAN的学习笔记之Python篇>~开篇是关于装饰器的,春节假期码的字哈哈~就让我们开始吧! 本文的例子都是自己想的,如果不是很合适,请大家提出宝贵意见哈~谢谢啦! 一.为什么要用“装饰器” 比如我们写了如下一段代码: # 打印0~99 def func(): for i in range(100): print(i) 我们想要监测执行这个函数花费了多

设计模式学习笔记(目录篇)

设计模式学习笔记(目录篇) 为了方便查看,特此将设计模式学习笔记系列单独做一个目录. 1   设计模式学习笔记(一:命令模式) 2   设计模式学习笔记(二:观察者模式) 3   设计模式学习笔记(三:装饰模式) 4   设计模式学习笔记(四:策略模式) 5   设计模式学习笔记(五:适配器模式) 6   设计模式学习笔记(六:责任链模式) 7   设计模式学习笔记(七:外观模式) 8   设计模式学习笔记(八:迭代器模式) 9   设计模式学习笔记(九:中介者模式) 10  设计模式学习笔记(