Go语言简单学习

Go语言的基础组成部分:


包声明

引入包

函数

变量

语句 & 表达式

注释


标识符(包括常量,变量,类型,函数名,结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的public );标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的protected


go语言不能把大括号单独放一行,会错误

go 层序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号、如以下Go语句由6个标记组成

----标识符:用来命名变量、类型等程序实体、一个标识符实际上就是一个或是多个字母(AZa~z)数字 (0~9) 、下划线组成的序列,但是第一个子符必须是字母或下划线而不能是数字

----程序一般由关键字、变量、常量、运算符、类型和函数组成

程序中可能会使用到这些分割符:括号() 中括号[] 和大括号{}

程序中可能会使用到这些标点符号:

----go 语言中变量的声明必须使用空格隔开

go语言数据类型:在go编程语言中,数据类型用于声明函数和变量

数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时侯需要用大数据的时侯才去申请大内存,就可以充分利用内存

go语言有以下数据类型:

1bool 布尔类型的值可以是常量true 或者 flase 一个简单的例子 var b bool = true

2、数字类型:整形 int 和浮点型 float64 ,go语言支持整形和浮点型数字,并且原生支持复数,其中位运算采用补码

3、字符串类型:字符串就是一串固定长度的子符连接起来的子符序列,go的子符串是由单个字节连接起来的,go语言的字符串的字节使用UTF-8 编码标识unicode 文本

4、派生类型

包括:指针类型(Pointer)、数组类型、结构化类型(struct)channel类型、函数类型、切片类型

接口类型(interface)、Map类型

----数字类型:

Go也有基于结构的类型,例如:intuintuintptr
























go 语言变量


声明变量的一般形式是使用var 关键字:

var indentifier (变量名) type(类型)























值类型和引用类型

所有像int float bool string 这些基本类型都属于值类型,使用这些类型的变量直接指向存在在内存中的值:

当使用等号=将一个变量的值赋值给另一个变量时,如:j=i,实际上是在内存中将I 的值进行了拷贝:


你可以通过 &i 来获取变量 I 的内存地址,例如:0xf840000040 (每次的地址都可能不一样)。值类型的变量的值存储在栈中,内存地址会根据机器的不同而不同,甚至相同的程序在不同的机器上执行后也会有不同的内存地址,因为每台机器可能有不同的存储器布局,并且位置分配也可能不同

更复杂的数据通常会需要使用多个字节,这些数据一般使用引用类型保存

一个引用类型的变量 r1 存储的是 r1 的值所在的内存地址 (数字),或内存地址中第一个字所在的位置


这个内存地址为称之为指针,这个指针实际上也被存在另外的某一个字节中,同一个引用类型的指针指向的多个字节可以是在连续的内存地址中(内存布局是连续的)、这也是计算效率最高的一种存储形式;

也可以将这些字分散存放在内存中,每个字都指示了下一个字所在的内存地址


这个内存地址称为指针,这个指针实际上也被存在另外的某一个字中

同一个引用类型的指针指向的多个字节可以是在连续的内存地址中(内存布局是连续的)、这也是计算效率最高的一种存储形式;

也可以将这些字分散存放在内存中,每个字都指示了下一个字所在的内存地址

当使用赋值语句 r2 = r1 时,只有引用(地址)被复制

如果r1 的值被改变了,那么这个值的所有引用都会指向被修改后的内容,在这个例子中,r2 也会受到影响


简短形式,使用:=赋值操作符

我们知道可以在变量的初始化时省略变量的类型而由系统自动推断,声明语句写上var关键字其实是有些多余了,因此我们可以将它们简写为 a:= 50 或者 b:= false

a b 的类型(int bool) 将由编译器自动推断

这是使用变量的首选形式、但是它只能被用在函数体内,而不可以用于全局变量的声明与赋值,使用操作符 := 可以高效地创建一个新的变量,称之为初始化声明


注意事项:

如果在相同的代码块中,我们不可以再次对于相同名称的变量使用初始化声明,例如 :a := 20 就是不被允许的,编译器会提示错误no new variables on left side of := 但是 a = 20 是可以的,因为这是给相同的变量赋予一个新的值

如果你在定义变量a之前使用它,则会得到编译错误,undefinet a

如果你声明了一个局部变量却没有在相同的代码块中使用它,同样会得到编译错误,例如下面这个例子当中的变量a



Go语言常量

常量是一个简单值的标识符,在程序运行时,不会被修改的量

常量中的数据类型只可以是bool型,数字型,(整数型,浮点型和复数)和字符串型

常量的定义格式:































常量还可以用作枚举:

常量可以用len(),cap(),unsafe() 函数计算表达式的值,常量表达式中,函数必须是内置函数,否则编译不通过






















位移















go 语言运算符

运算符用于在程序执行时执行数学或逻辑运算

Go语言内置的运算符有:

---算术运算符

+ - * / % ++ –

---关系运算符

== < > <= >=

---逻辑运算符

&& || !

---位运算符

& | ^ << >>

---赋值运算符

= += -= *= /= %= <<= >>= &= ^= |=

---其他运算符

& 返回变量存储地址

* 指针变量



运算符优先级:有些运算符有较高的优先级,二元运算符的运算方向均是从左至右,下表列出了所有运算符以及它们的优先级,由下至上代表优先级由高到低



Go语言条件语句

条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为true 来决定是否执行指定语句,并在条件为false 的情况再执行另外的语句


下图展示了程序语言中条件语句的结构:



go 语言提供了以下几种条件判断语句:

if语句 由一个布尔表达式后紧跟一个或多个语句组成

if。。。else 语句后可以使用可选的else语句,else语句

中的表达式在布尔表达式值为false 时执行

你可以在if else if 语句中嵌入一个或多个 if else if

语句

switch 语句用于基于不同条件执行不同动作

select 语句类似于switch 语句,但是select 会随即执行一个可运行的case ,如果没有case 可运行,它将阻塞,

直到有case 可运行






Go语言循环语句:

在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句



for 循环 重复执行语句块

循环嵌套 在for 循环中嵌套一个或多个for 循环


循环控制语句:

break 语句:经常用于 中断当前for循环或跳出

switch语句


continue 语句:跳过当前循环的剩余语句,然后继续进行下一轮循环


goto 语句:将控制转移到被标记的语句








无限循环:如果循环中条件语句永远不为false 则会进行无限循环,我们可以通过 for 循环语句中只设置一个条件表达式来执行无限循环


Go语言函数

函数是基本的代码块,用于执行一个任务

Go语言最少有个main() 函数

你看以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务

函数声明告诉了编译器函数的名称,返回类型,和参数

Go语言标准提供了多种可动用的内置的函数,例如 len() 函数可以接受不同类型参数并返回该类型的长度,如果我们传入的是字符串则返回字符串的长度,如果传入的是数组,则返回的数组中包含的元素个数


Go 语言函数的定义格式如下:
















func function_name ([paramter list]) [return_types]{………}

函数定义解析:

---func: 函数由 func 开始声明

---function_name : 函数名称,函数名和参数列表一起构成了函数签名

---parameter list :参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数,参数列表指定的是参数类型,顺序,及参数个数。参数是可选的,也就是说函数也可以不包含参数

---return_types : 返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下,return_types 不时必须的

---函数体:函数定义的代码集合


函数调用:当创建函数时,你定义了函数需要做什么,通过调用该函数来执行指定任务

函数调用,向函数传递参数,并返回值,例如:



函数返回多个值:





















函数参数:

函数如果使用参数,该变量可称为参数的形参

形参就像定义在函数体内的局部变量

调用函数,可以通过两种方式来传递参数:


值传递:值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数

引用传递:引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数

默认情况下,Go语言使用的是值传递,即在调用过程中不会影响到实际参数


函数用法

函数作为值函数定义后可作为值来使用

闭包闭包就是匿名函数,可在动态编程中使用

方法方法就是一个包含了接受者的函数


 

猜你喜欢

转载自www.cnblogs.com/--just-lbk/p/9571894.html