您的位置:首页 > 编程语言 > Go语言

Go学习笔记-go语言基础

2016-12-04 23:26 666 查看
Go 语言共有 25 个关键字,全部为小写:

break default
func interface
select

case defer
go map
struct

chan else
goto package
switch

const fallthrough
if range
type

continue for
import return
var 

程序的一般结构:

通过 package 定义包名

只有名称为 main 的包可以有 main 函数

通过 import 关键字导入非 main 包

通过 const 关键字定义常量

通过 var 关键字声明变量

通过 type 关键字和 struct 或 interface 搭配定义结构或接口

通过 func 关键字定义函数和方法

单行注释:// 注释内容

多行注释:/* 注释内容 */

导入外部包的两种方法:

import "fmt" 

import "os" 

import (
"fmt" 
"os" 

)

通过格式 <PackageName>.<ObjectName> 来对包中的对象进行调用

如果导入包但未调用包中的任何对象,则会报出编译错误
imported and not used

当两个外部包的名称过于相近或相同时,可以使用导入别名来区分

import f "fmt"

还可以在调用某个外部包的内容时,省略包名直接调用

import . "fmt"

在 Go 语言中,使用 首字母大小 写来决定该对象是否可以被外部包所调用

1)如果首字母为 小写,则表示私有的

func privateFunc

2)如果首字母为 大写,则表示公开的

func PublicFunc

该规则适用于 所有的 Go 语言对象,无论是内置的还是用户自己创建的

###########

Go类型与变量

布尔型:bool

长度:1 位

取值范围:true – false

注意事项:不可以用数字表示

整型:int/uint
1) 根据平台不同可以为 32 或 64 位

8 位整型:int8/uint8

1) 长度:1 字节

2) 取值范围:-128 - 127/0 - 255

字节型:byte(uint8 的别名)

16 位整型:int16/uint16

长度:2 字节

取值范围:-32768 - 32767/0 – 65535

32 位整型:int32(rune)/uint32

1) 长度:4 字节

2) 取值范围:-232/2 - 232/2-1/0 - 233-1

64 位整型:int64/uint64

1) 长度:8 字节

2) 取值范围:-264/2 - 264/2-1/0 - 265-1

浮点型:float32/float64

长度:4/8 字节

小数位:精确到 7/15 小数位

复数型:complex64/complex128

长度:8/16 字节

 指针型:uintptr

足够保存指针的 32 或 64 位整型

 其它值类型:

数组(array)

结构(struct)

字符串(string)

引用类型(非传统引用):

切片(slice)

类哈希表(map)

管道(chan)

接口型(interface)

函数型(func)

零值并不等价于空值(NULL),是指在变量被声明为某种类型之后自动获得的默认值。

int ->
0
bool ->
false
float64
-> 0.0
string
-> ""(空字符串)
结构 ->
空结构
引用类型 ->
nil(空指针)

##类型别名

类型别名可以为某个类型赋予新的合法名称

类型别名并不是单纯的重命名或指向,而是用源类型作为底层类型,定义了一个全新的类型

新类型与源类型之间需要类型转换,属于相互兼容的类型

新类型可以拥有属于自己的一套方法

新类型不会继承源类型的方法,而需要进行类型转换后才可调用

##变量的声明与赋值

单个变量的声明与赋值:

声明格式:var <变量名称> <变量类型>

赋值格式:<变量名称> = <表达式>

声明并赋值(类型推断):

var <变量名称> [变量类型] = <表达式>

<变量名称> := <表达式>

使用下划线(_)抛弃赋值:_ = <表达式>

多个变量的声明与赋值

可以使用 var() 的形式进行简写

可以使用并行赋值(变量的类型是相同的):

var <变量1>, <变量2> [变量类型] = <表达式1>, <表达式2>

<变量1>, <变量2> := <表达式1>, <表达式2>

##对变量进行类型转换

Go 语言不存在隐式转换,所有类型转换必须显式声明

类型转换只能发生在两种相互兼容的类型之间(例如:整型和整型之间)

类型转换的格式:

<变量2> [:]= <类型2>(<变量1>)

##常量与运算符

常量的值在编译时就已经确定

常量的定义格式与变量基本相同

使用 const 关键字来定义常量

使用 const() 关键字来定义常量组

常量等号右侧必须是常量或者常量表达式

常量表达式所涉及的函数必须是内置函数

##常量组的自动赋值特性

在定义常量组时,如果不提供初始值,则默认使用上一行的表达式

使用相同的常量表达式不代表具有相同的值

const(
a = "A"
b

)

##iota 计数器的使用

iota 是常量组的计数器

iota 从 0 开始,每行递增 1

每个新的常量组都会将 iota 的值重置为 0

通过常量的初始化规则和 iota 计数可达到枚举的效果

const(
a = iota
b

)

##运算符的操作方法

Go 语言中的运算符均是从左至右结合

运算符具有优先级(从高到底):

! (一元运算符)

*  / %
<< >>
& &^

+  - |
^

==   != <
<= >= >

<- (专门用于 channel)

&& (二元运算符)

||

1.  取反:!
1)!false

四则运算:+ - * /
1)1 + 2 * 3 / 4

取余:%
1)8 % 5

左移/右移:<< / >>
1)1 << 10
2)1000 >> 2

按位与:&
1) 3 & 2

按位与非:&^
1)6 &^ 11

按位或:|
1)5 | 3

按位异或(XOR):^
1)5 ^ 2

逻辑运算符:
1)==   !=
< <= >=
>
2)&&  ||

<- 专门用于 channel

管道传入/取出:<-
1)<-chan
2)chan<- true

###

Go语言控制语句

###

##Go语言控制语句 if

Go 语言中的判断语句 if 包含以下特性:

条件表达式两侧不需要括号

左大括号必须和条件语句或 else 语句在同一行

支持一个初始化表达式(可以是并行赋值)

初始化语句中的变量为 block 级别(包括 else 代码块)

##循环语句 for

Go 语言中的循环语句只有一个 for 关键字,其包含以下特性:

左大括号必须和条件语句在同一行

支持无限循环、条件循环和步进表达式

初始化和步进表达式可以是多个值

条件语句每次循环都会被检查,因此建议尽量使用常量和变量代替函数

##选择语句 switch

Go 语言中的选择语句使用关键字 switch,其包含以下特性:

左大括号必须和条件语句在同一行

支持一个初始化表达式(可以是并行赋值)

可以使用任何类型或表达式作为条件语句

不需要显示调用 break,一旦条件符合就会结束判断

如果希望继续执行下一个 case,则需要显示调用 fallthrough 语句

##跳转语句

Go 语言中的跳转语句包括关键字 goto、break 和 continue,主要包含以下特性:

三种语法都可以配合标签使用

标签名区分大小写,不适用标签则会导致编译错误

break 和 continue 关键字与标签的组合可用于跳出多层循环

goto 关键字的作用是调整执行位置,与其它两个关键字的原理并不相同
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: