什么是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【译】的更多相关文章

  1. Apache Shiro系列三,概述 —— 10分钟入门

     一.介绍 看完这个10分钟入门之后,你就知道如何在你的应用程序中引入和使用Shiro.以后你再在自己的应用程序中使用Shiro,也应该可以在10分钟内搞定. 二.概述 关于Shiro的废话就不多说了 ...

  2. 「译」JUnit 5 系列:基础入门

    原文地址:http://blog.codefx.org/libraries/junit-5-basics/ 原文日期:25, Feb, 2016 译文首发:Linesh 的博客:JUnit 5 系列: ...

  3. JavaScript 10分钟入门

    JavaScript 10分钟入门 随着公司内部技术分享(JS进阶)投票的失利,先译一篇不错的JS入门博文,方便不太了解JS的童鞋快速学习和掌握这门神奇的语言. 以下为译文,原文地址:http://w ...

  4. 【原创】30分钟入门 github

    很久没更新了,这篇文章重点在github的入门使用,读者可以下载github for windows shell,边看边操作,加深印象. 好了,30分钟的愉快之旅开始吧: 一.github使用的注意事 ...

  5. kafka原理和实践(一)原理:10分钟入门

    系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践( ...

  6. 分布式学习系列【dubbo入门实践】

    分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...

  7. Shell脚本编程30分钟入门

    Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...

  8. Objective-C 30分钟入门教程

    Objective-C 30分钟入门教程 我第一次看OC觉得这个语言的语法有些怪异,为什么充满了@符号,[]符号,函数调用没有()这个,但是面向对象的高级语言也不外乎类,接口,多态,封装,继承等概念. ...

  9. 十分钟入门less(翻译自:Learn lESS in 10 Minutes(or less))

    十分钟入门less(翻译自:Learn lESS in 10 Minutes(or less)) 注:本文为翻译文章,因翻译水平有限,难免有缺漏不足之处,可查看原文. 我们知道写css代码是非常枯燥的 ...

随机推荐

  1. vuex分模块管理

    1.定义命名空间 dog.js export default { namespaced: true, // 局部状态 state: { name: "拉布拉多", age: 1 } ...

  2. RSA算法原理(简单易懂)

    1. 什么是RSA RSA算法是现今使用最广泛的公钥密码算法,也是号称地球上最安全的加密算法.在了解RSA算法之前,先熟悉下几个术语 根据密钥的使用方法,可以将密码分为对称密码和公钥密码 对称密码:加 ...

  3. 浅谈javascript函数执行过程

    javascript函数执行过程: 1. 为函数创建一个执行环境 2. 复制函数的 [[scopes]] 属性中的对象构建起执行环境的作用链域 3. 创建函数活动对象并推入执行环境作用链域的前端 4. ...

  4. 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即可.下面简要说明一些步骤: ...

  5. unittest(22)- p2p项目实战(2)-http_request

    # 2. http_request.py import requests from learn_logging_5.write_log_class import MyLog my_logger = M ...

  6. Spring History和spring设计哲学

    1.spring history spring起点 2002年10月,Rod Johnson 写了一本名为Expert One-on-One J2EE设计和开发的书.本书由Wrox发布,涵盖了当时Ja ...

  7. Selenium的Web自动化测试(送源码)

    8.1  Selenium自动化测试准备 1.Selenium介绍 Selenium是一个Web开源自动化测试框架,页面级操作,模拟用户真实操作,API从系统层面触发事件. Selenium 1.0  ...

  8. 千亿VR市场 将被国内厂商玩坏多少?

    将被国内厂商玩坏多少?" title="千亿VR市场 将被国内厂商玩坏多少?"> 智能硬件行业在不断寻求新的突破口,当智能手机.平板.电视.家电等都司空见惯之后,能 ...

  9. ubuntu 代理设置

    在学习工作中使用vagrant作为开发环境已经有很长一段时间了,使用ubuntu 作为开发系统 在使用中发现,即使修改了apt的source.list源文件,在面对一些开发中需要的软件工具的时候,不可 ...

  10. linux下好用软件全记录

    开发工具 1. Shutter 抓图工具(用过linux最好的抓图工具,类似win下的Snagit) 2. RabbitVCS SVN客户端(可以和subversion媲美的svn客户端) 3. My ...