亲宝软件园·资讯

展开

GO系列 | 5分钟入门GO【译】

EvanLeung 人气:0
# 什么是Google Go? Google Go是由Robert Griesmer,Rob Pike和Ken Thompson在Google设计的一种开源编程语言。 Go在语法上类似于C语言; 除了内存安全性,垃圾回收,结构化类型和CSP样式并发之外。 它具有丰富的标准库。 它最初于2007年开发,于2009年11月发布。最近于2019年4月11日进行了更新。 Google Go也被称为Golang。 Golang是汇编语言(GC)和C ++`(gccgo)的实现。 ## 先决条件 对于Go编程语言,应该熟悉C编程。 如果您擅长C语言,那么您很容易理解Go编程的概念。 我试图简化本教程,并从头开始。 *** # Go编程的特点 它的一些基本特性如下: - 快速编译 - 内置并发支持 - 它支持接口和类型嵌入 - 它是现代快速并且强壮的。 为了使其简洁明了,特意排除了其某些功能。 Go的一些**被排除的特性**是- - 类型继承支持 - 方法或操作符重载 - 指针的算术 - 断言的支持 - 泛型编程支持 *** # GO程序结构 Go程序的基本结构包含以下部分: - 声明包 - 导入包 - 变量 - 语句和表达式 - 函数 - 注释 *** # Go安装入门指南 Go编程可以安装在Windows,Linux,Mac等不同的操作系统上。要安装Go语言,请访问其官方网站golang.org。 选择所需的操作系统包,例如Windows 7,选择适用于window7的设置,然后按照安装过程进行操作。 ## 设置环境变量(对于Windows) 您可以在“系统”控制面板的“高级”选项卡上找到环境变量的设置。 ## 检查Go版本 您可以使用```go version```命令检查**Go**语言的版本。 ## 第一个Go程序 我们可以在任何所需的目录中的任何基本编辑器上编写**Go**代码,并将其保存为扩展名```.go``` ```go package main import ("fmt") func main() { fmt.Println("Hello World! This is my first Go program\n") } ``` 保存扩展名为```.go```,我这里保存为first.go ### 执行 打开CMD然后按执行 ```go go run First.go ``` ### 输出 ```go Hello world! This is my first Go program ``` 如下所示 ![](https://img-blog.csdnimg.cn/20200318182841401.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0V2YW5fTGV1bmc=,size_16,color_FFFFFF,t_70) ## GO的包、导入操作和可见性 ### 包 为了便于维护程序我们将软件包进行分类。 Go程序的每个文件都属于某些程序包。 每个Go程序必须具有```“main”```程序包。 包命名应使用小写字母。 如果更改并重新编译了程序包,则也必须重新编译属于该软程序包的所有客户端程序。 ### 导入操作 ```Import```用于从库中导入任何程序包。 Go程序通过```import```关键字链接到其他程序包。 我们可以通过一个语句导入多个程序包,例如: ```go import “fmt” ``` ```go import “os” ``` 或者我们可以写成 ```go import “fmt”; import”os”; ``` 我们还可以使用以下方式进行包导入操作 ```go import( “fmt” “os”) //或者 import(“fmt;”os”) ``` ### 可见性 标识符可以是变量,函数,类型或结构(struct)字段或常量。 标识符可以声明为小写或大写。 如果标识符**以小写字母声明**,则它将在**包中可见**。 如果以大写形式声明,那么它将在称为```export```的包的内部或外部可见。 ```点(.)```运算符用于访问标识符: ```pack.Date```(此处为pack)是包名称,```Date```是标识符。 *** # Google Go数据类型 数据类型表示存储在变量中的值的类型,函数返回的值的类型,等等。 **Go-中有三种基本数据类型** - 数值类型 - 字符串类型 - 布尔型 ## 数值类型 它代表各种数值,例如整数,浮点数和复数值。 **一些数值类型:** - In8(8位有符号整数) - Int16(16位有符号整数) - Int32(32位有符号整数) - Int64(64位有符号整数) - Uint8(8位无符号整数) - Uint16(16位无符号整数) - Uint32(32位无符号整数) - Uint64(64位无符号整数) - Float32(32位浮点数) - Float64(64位浮点数) - Complex64(具有32个实部和虚部) - Complex128(具有浮点数的32个实部和虚部) ## 字符(String)类型 字符串表示字符序列(字节)。 可以在字符串中执行各种操作,例如连接,提取子字符串等。 ## 布尔类型 它有两个值```true```或者```false``` ## 变量 ```变量```是指用于存储某些值的内存地址。```类型参数```表示可以存储在内存中的值类型。 ### 语法 ```go Var <变量名> <类型> ``` 声明变量后,你就可以给变量分配一个```值```。 您也可以在声明变量时给出```初始值```。 ```go Var <变量名> <类型> = <值> ``` 也可以在单个语句中声明多个变量 ```go Var <变量1>, <变量2> = <值1>, <值2> ``` **一个便于理解变量的GO代码:** ```go package main import “fmt” func main() { var a int //variable declaration a=3 //assigning value 3 in a fmt.Println("a:", a) //prints 3 /https://img.qb5200.com/download-x/declaring a integer variable b with value 20 var b int b=20 fmt.Println("b:", b) /https://img.qb5200.com/download-x/declaring a variable c with value 50 var c=50 fmt.Println("c:", c) //Multiple variables are assigned in single line- p with an integer and q with a string var p, q = 100,"hello" fmt.Println("p and q:", p,q) } ``` **输出** ```go a: 3 b: 20 c: 50 p and q: 100 hello ``` ## 常量 常量通过使用关键字```“ const”```来声明。 如果分配了常量,则不能更改其值。 **Sample:** ```go package main import ("fmt") func main() { const x =50 fmt.Println(x) x = 20 fmt.Println(x) } ``` **输出** ```go .constant.go:7:4: cannot assign to b ``` ## 循环 循环用于根据给定条件重复执行该代码块。 大多数编程语言都支持三种循环类型:```for,while和dowhile```。 **注意:** Go仅支持循环。 **语法** ```go for initialization_expression; evaluation_expression; iteration_expression{s // statements } ``` 首先执行```initialization_expression```,然后计算```evaluation_expression```。如果为真,则执行块代码。执行```itereation_expression id```,然后循环再次开始。这个过程将继续下去,直到```evaluation_expression```变为```false```。 **循环的代码示例** ```go package main import "fmt" func main() { var i int for i = 0; i <= 7; i++ { fmt.Println(i) } } ``` **输出** ```go 0 1 2 3 4 5 6 7 ``` ## 条件语句 ### if-else 语句 是一个条件语句 **语法** ```go if condition { // statement1 } else {// statement2 } ``` **验证输入的数字是正数还是负数** ```go package main import "fmt" func main() { int i; if i< 0 { //Executes if i< 0 fmt.Println("i is negative") } else{ fmt.println(“I is positive) } ``` ### Switch语句 ```Swtich```也是条件语句。 ```Switch```语句比较条件并评估结果。 找到匹配项后,将执行与该条件关联的语句。 我们还可以添加一个默认条件来进行切换,如果找不到其他匹配项,将执行该默认语句。 **语法** ```go switch expression { case 1: statement_1 case 2: statement_2 case n: statement_n default: statement_default } ``` **Switch示例代码** ```go package main import "fmt" func main() { x,y := 10,5 switch x+y { case 1: fmt.Println("Sum is 15") case 2: fmt.Println("Sum is 20") case 3: fmt.Println("Sum is 30") default: fmt.Println("Printing default") } } ``` **输出** ```go sum is 15 ``` ### Goto语句 ```Goto```是一个跳转语句。 它用于将控件转移到程序的其他部分。 每个```Goto```语句都有一个标签,我们使用该标签来转移程序的控制权。 **示例** ```go Package main Import (“fmt”) Func main() { Var input int Loop: fmt.Print("You are a child ") fmt.Print("Enter age ") fmt.Scanln(&input) if (input <= 18) { goto Loop } else { fmt.Print("you are a man") } } ``` **输出** ```go You are a child Enter your age 12 You are a child Enter your age 19 You are a man ``` ### break语句 ```break```语句可以在for循环中用于计数器,条件等。它也可以在```switch```语句中使用。 ```break```语句用于中断发生它的最里面运行的语句。 **语法** ```go break; ``` **bread语句示例** ```bash package main import "fmt" func main() { var x int = 1 for x< 10{ fmt.Print("Value of x is ",x,"\n") x++; if x > 5{ /* Terminate the loop using break statement */ break; } } } ``` **输出** ```go Value of x is 1 Value of x is 2 Value of x is 3 Value of x is 4 Value of x is 5 ``` ## 数组 数组是具有相同数据类型的元素的集合。 ```Array```表示固定大小,并命名为元素序列。 数组不能具有两个不同数据类型的元素。 一旦定义,我们就无法更改数组的大小。 **语法** ```go var arrayname [size] type ``` 每个数据元素都可以按如下赋值 ```go arrayname [index]= value ``` 数组坐标从 ```0 到 1``` 我们可以在声明期间赋值给数组元素 ```go arrayname:=[size] type { value_0,value_1,value_2,…….,value_n} ``` **GO数组示例** ```go package main import "fmt" func main() { var numbers [3] string // string declaration of array size 3 numbers[0] = "One" numbers[1] = "Two" numbers[2] = "Three" fmt.Println(numbers[1]) //prints Two fmt.Println(len(numbers)) //prints 3 fmt.Println(numbers) // prints [One Two Three] directions := [...] int {1,2,3,4,5} // creating an integer array and the size of the array is defined by the number of elements fmt.Println(directions) //prints [1 2 3 4 5] fmt.Println(len(directions)) //prints 5 } ``` **输出** ```go Two 3 [One two three] [1 2 3 4 5] 5 ``` ## Slice切片 切片是数组的一部分,或者是其指向的基础数组的局部视图。 您可以像访问数组一样访问切片名称和索引号。 我们可以更改切片的大小,但不能更改数组的大小。 切片的内容实际上是数组的指针。 如果我们更改slice中的元素,那么它也会影响数组的内容。可以把```Slice```理解成Java的动态数组```ArrayList``` **语法** ```go Var slice_name [] type= array_name [start: end] ``` *** # 小结 好了,到这里相信大家已经了解到了GO的一些特性和基本用法,我们初学一门语言不要死磕它的所有内容,主要关注它的特性,然后再跟我们学过的语言类比学习,程序设计的思想实际是跟我们过去学过的语言大同小异,下一章我们就可以直接进入程序实战演练,去熟悉GO的高级用法,当遇到不懂的东西,我们再去查找相关资料,这样子会吸收得更快。

加载全部内容

相关教程
猜你喜欢
用户评论