GO系列 | 5分钟入门GO【译】
什么是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
package main
import ("fmt")
func main() {
fmt.Println("Hello World! This is my first Go program\n")
}
保存扩展名为.go
,我这里保存为first.go
执行
打开CMD然后按执行
go run First.go
输出
Hello world! This is my first Go program
如下所示
GO的包、导入操作和可见性
包
为了便于维护程序我们将软件包进行分类。 Go程序的每个文件都属于某些程序包。 每个Go程序必须具有“main”
程序包。
包命名应使用小写字母。 如果更改并重新编译了程序包,则也必须重新编译属于该软程序包的所有客户端程序。
导入操作
Import
用于从库中导入任何程序包。 Go程序通过import
关键字链接到其他程序包。
我们可以通过一个语句导入多个程序包,例如:
import “fmt”
import “os”
或者我们可以写成
import “fmt”;
import”os”;
我们还可以使用以下方式进行包导入操作
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
变量
变量
是指用于存储某些值的内存地址。类型参数
表示可以存储在内存中的值类型。
语法
Var <变量名> <类型>
声明变量后,你就可以给变量分配一个值
。 您也可以在声明变量时给出初始值
。
Var <变量名> <类型> = <值>
也可以在单个语句中声明多个变量
Var <变量1>, <变量2> = <值1>, <值2>
一个便于理解变量的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
//declaring a integer variable b with value 20
var b int
b=20
fmt.Println("b:", b)
//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)
}
输出
a: 3
b: 20
c: 50
p and q: 100 hello
常量
常量通过使用关键字“ const”
来声明。 如果分配了常量,则不能更改其值。
Sample:
package main
import ("fmt")
func main() {
const x =50
fmt.Println(x)
x = 20
fmt.Println(x)
}
输出
.constant.go:7:4: cannot assign to b
循环
循环用于根据给定条件重复执行该代码块。 大多数编程语言都支持三种循环类型:for,while和dowhile
。
注意: Go仅支持循环。
语法
for initialization_expression; evaluation_expression; iteration_expression{s
// statements
}
首先执行initialization_expression
,然后计算evaluation_expression
。如果为真,则执行块代码。执行itereation_expression id
,然后循环再次开始。这个过程将继续下去,直到evaluation_expression
变为false
。
循环的代码示例
package main
import "fmt"
func main() {
var i int
for i = 0; i <= 7; i++ {
fmt.Println(i)
}
}
输出
0
1
2
3
4
5
6
7
条件语句
if-else 语句
是一个条件语句
语法
if condition
{ // statement1
}
else
{// statement2
}
验证输入的数字是正数还是负数
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
语句比较条件并评估结果。 找到匹配项后,将执行与该条件关联的语句。 我们还可以添加一个默认条件来进行切换,如果找不到其他匹配项,将执行该默认语句。
语法
switch expression {
case 1:
statement_1
case 2:
statement_2
case n:
statement_n
default:
statement_default
}
Switch示例代码
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")
}
}
输出
sum is 15
Goto语句
Goto
是一个跳转语句。 它用于将控件转移到程序的其他部分。 每个Goto
语句都有一个标签,我们使用该标签来转移程序的控制权。
示例
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")
}
}
输出
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
语句用于中断发生它的最里面运行的语句。
语法
break;
bread语句示例
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;
}
}
}
输出
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
表示固定大小,并命名为元素序列。 数组不能具有两个不同数据类型的元素。 一旦定义,我们就无法更改数组的大小。
语法
var arrayname [size] type
每个数据元素都可以按如下赋值
arrayname [index]= value
数组坐标从 0 到 1
我们可以在声明期间赋值给数组元素
arrayname:=[size] type { value_0,value_1,value_2,…….,value_n}
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
}
输出
Two
3
[One two three]
[1 2 3 4 5]
5
Slice切片
切片是数组的一部分,或者是其指向的基础数组的局部视图。 您可以像访问数组一样访问切片名称和索引号。 我们可以更改切片的大小,但不能更改数组的大小。 切片的内容实际上是数组的指针。 如果我们更改slice中的元素,那么它也会影响数组的内容。可以把Slice
理解成Java的动态数组ArrayList
语法
Var slice_name [] type= array_name [start: end]
小结
好了,到这里相信大家已经了解到了GO的一些特性和基本用法,我们初学一门语言不要死磕它的所有内容,主要关注它的特性,然后再跟我们学过的语言类比学习,程序设计的思想实际是跟我们过去学过的语言大同小异,下一章我们就可以直接进入程序实战演练,去熟悉GO的高级用法,当遇到不懂的东西,我们再去查找相关资料,这样子会吸收得更快。
GO系列 | 5分钟入门GO【译】的更多相关文章
- Apache Shiro系列三,概述 —— 10分钟入门
一.介绍 看完这个10分钟入门之后,你就知道如何在你的应用程序中引入和使用Shiro.以后你再在自己的应用程序中使用Shiro,也应该可以在10分钟内搞定. 二.概述 关于Shiro的废话就不多说了 ...
- 「译」JUnit 5 系列:基础入门
原文地址:http://blog.codefx.org/libraries/junit-5-basics/ 原文日期:25, Feb, 2016 译文首发:Linesh 的博客:JUnit 5 系列: ...
- JavaScript 10分钟入门
JavaScript 10分钟入门 随着公司内部技术分享(JS进阶)投票的失利,先译一篇不错的JS入门博文,方便不太了解JS的童鞋快速学习和掌握这门神奇的语言. 以下为译文,原文地址:http://w ...
- 【原创】30分钟入门 github
很久没更新了,这篇文章重点在github的入门使用,读者可以下载github for windows shell,边看边操作,加深印象. 好了,30分钟的愉快之旅开始吧: 一.github使用的注意事 ...
- kafka原理和实践(一)原理:10分钟入门
系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践( ...
- 分布式学习系列【dubbo入门实践】
分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...
- Shell脚本编程30分钟入门
Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...
- Objective-C 30分钟入门教程
Objective-C 30分钟入门教程 我第一次看OC觉得这个语言的语法有些怪异,为什么充满了@符号,[]符号,函数调用没有()这个,但是面向对象的高级语言也不外乎类,接口,多态,封装,继承等概念. ...
- 十分钟入门less(翻译自:Learn lESS in 10 Minutes(or less))
十分钟入门less(翻译自:Learn lESS in 10 Minutes(or less)) 注:本文为翻译文章,因翻译水平有限,难免有缺漏不足之处,可查看原文. 我们知道写css代码是非常枯燥的 ...
随机推荐
- [LC] 83. Remove Duplicates from Sorted List
Given a sorted linked list, delete all duplicates such that each element appear only once. Example 1 ...
- C# for循环提升效率的写法
,,,,,}; ,iLen=arr.Length;i<iLen;i++) //必须是显示申明,不能var { ........... }
- mac上svn: This client is too old to work with working copy 问题的解决
安装svn时,提示This client is too old to work with working copy........原因:svn的版本过旧,安装1.8的svn即可.下面简要说明一些步骤: ...
- java 实体类中日期格式转换
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss&quo ...
- 前端自动化构建工具gulp
1.gulp的安装 首先确保你已经正确安装了nodejs环境.然后以全局方式安装gulp: npm install -g gulp 全局安装gulp后,还需要在每个要使用gulp的项目中都单独安装一次 ...
- 使用Commons Logging
Commons Logging 和Java标准库提供的日志不同,Commons Logging是一个第三方日志库,它是由Apache创建的日志模块,需要导入commons-logging-1.2.ja ...
- 吴裕雄--天生自然KITTEN编程:逃脱升天
- js对象或数组深复制
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 微软亚洲研究院开源图数据库GraphView
我们很高兴地宣布,由微软亚洲研究院系统算法组开发的图数据库GraphView通过GitHub平台开源.GraphView是一款中间件软件,方便用户使用关系数据库SQL Server 或Azure SQ ...
- C#连接Informix数据库
最近在工作中遇到了需要连接Informix数据库的问题,在通过研究后发现了可以通过多种方式实现,我选择的是通过IBM Informix .NET Provider.该方式需要引用IBM.Data.In ...