Go语言入门基础教程--Let's go

Go语言从开源至今已经十余年了,它拥有活跃的社区和一定的使用流行度(2019年底排名第14位).
今天我们将认识Go语言是什么?探讨Go能用来做什么?还将使用Go语言的基础语法进行实践操作.

什么是Go语言

Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。
Go 是一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。

Go适合做什么

Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。
对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。

Go 语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面,Go语言广泛应用于Web应用、API应用、下载应用等;除此之外,Go语言还可用于内存数据库和云平台领域,目前国外很多云平台都是采用Go开发。

环境安装

Go语言安装包下载路径: https://golang.google.cn/dl/

Linux安装
1.下载go1.13.6.linux-amd64.tar.gz
2.将安装包解压到/usr/local:

sudo tar -C /usr/local -xzf go1.13.6.linux-amd64.tar.gz

3.添加PATH环境变量:

export PATH=$PATH:/usr/local/go/bin

注意:此方式添加的环境变量仅在当前命令窗口有效;如需配置全局环境变量,可在.bashrc添加(不推荐).

Windows安装
1.下载go1.13.6.linux-amd64.msi
2.点击安装包进行安装,默认会安装在`C:\Go`目录下,安装后会自动添加环境变量到Path下;

注意:添加环境变量后你需要重启命令窗口才会生效。

Hello World实例

先来看一下简单的"Hello World"代码(推荐使用VS Code编辑器进行编写,这样只需要安装插件,减少软件的安装):

package main
import "fmt"
func main() {
   // 输出Hello, World!
   fmt.Println("Hello, World!")
}

在命令窗口使用`go run`运行该文件,输出如下:
print hello
还可以使用`go build`指令来生成二进制文件(Windows会生成.exe文件):

我们可以来解读一下这个示例代码:

第一行`package main`,定义包名。必须在源文件中非注释的第一行指明这个文件属于哪个包,每个 Go 应用程序都包含一个名为 main 的包;
第二行`import "fmt"`,告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素);
第三行`func main()`,程序开始执行的函数,main 函数一般来说都是第一个执行的函数(如果有 init() 则会先执行该函数);
第四行`//`,单行注释,多行注释用`/**/`,与其他编程语言类型。
第五行`fmt.Print()`,将字符串输出到控制台。

可以看出,Go 语言的基础组成有以下几个部分:包声明引入包函数变量语句 & 表达式注释

特殊语法

Go语言中有几处有别于其他编程语言的规定,并且是强制性的,不遵循的话会产生编译错误:

  1. 每行程序结束后不需要撰写分号`;`
  2. 大括号`{`不能单独放在一行
  3. if判断和for循环不需要以小括号包括起来

比如我们单独另起一行放置`{`,进行编译会出现如下报错:

基础语法

定义变量

Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。
声明变量的一般形式是使用 var 关键字。

package main
import "fmt"
func main() {
   var a = "aaa"
   fmt.Println(a)
   b := "bbb"
   fmt.Println(b)
   var c, d int = 1, 2
   fmt.Println(c ,d)
}

输出:

注意:省略 var进行变量定义时(首选:=赋值形式),`:= `左侧如果没有声明新的变量,会产生编译错误。

条件语句之select

select 是Go中的一个控制结构,类似于用于通信的switch。每个case必须是一个通信操作,要么是发送要么是接收。
select 随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。默认子句应总是可运行的。

示例代码:

package main
import "fmt"
func main() {
   var c1, c2, c3 chan int
   var i1, i2 int
   select {
      case i1 = <-c1:
         fmt.Printf("received ", i1, " from c1\n")
      case c2 <- i2:
         fmt.Printf("sent ", i2, " to c2\n")
      case i3, ok := (<-c3):  // same as: i3, ok := <-c3
         if ok {
            fmt.Printf("received ", i3, " from c3\n")
         } else {
            fmt.Printf("c3 is closed\n")
         }
      default:
         fmt.Printf("no communication\n")
   }    
}

输出结果:

关于通道(channel)

上面 select 的示例代码里引出来Go语言中一个重要的部分——通道(channel)。
channel 是 goroutine 之间通信的一种方式,通过它,一个 goroutine (轻量级线程)可以向另一 goroutine 发送消息。

channel 使用内置的 make 函数创建,和其他引用类型一样,channel 的空值为 nil 。
操作符 <- 用于指定通道的方向,发送或接收。如果未指定方向,则为双向通道。
看一下 channel 的读写示例:

// create channel
ch := make(chan int)
// write to channel
ch <- x
// read from channel
x <- ch
// another way to read
x = <- ch

注意:channel 一定要初始化后才能进行读写操作,否则会永久阻塞。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值