Go Web编程实战(1)----Go语言的基础语法

简介: Go Web编程实战(1)----Go语言的基础语法

前言


很高兴能够一起和大家学习Go语言,对于它的场景其实很多,包括云计算、容器虚拟化、分布式存储、网络爬虫、运维开发、Web开发、服务端开发、区块链、IoT等领域都有所应用。


今天,博主主要来详细介绍其基本的实用语法,方便读者能够快速的掌握Go语言的用法。


Hello World

程序员有一个神奇的定律,那就是Hello World。在我们每次学习新的编程语言时,都会接触到它。而Go语言的第一课,同样也从它开始。

package main
import "fmt"
func main()  {
  fmt.Println("Hello World")
}


代码其实很简单,学过其他语言的应该很容易看懂。


包的声明与导入

其中,package是声明包名的关键字,“main”就是包名,这里也可以自定义。


Go语言的包,具有如下特性:


1.一个目录下的同级文件属于一个包

2.包名可以与其目录名不同

3.main包是Go语言应用程序的入口包。一个Go语言应用程序必须有且仅有一个main包。如果一个程序没有main包,编译时就会报错。


而import是导入包的关键字,通过它我们能引用其他包的变量或者方法。需要注意的是,包名必须用双引号(“”)包围。


如果你想导入多个包,也可以这样写:

import(
  "fmt"
  "os"
)
/*起别名*/
import(
  fm "fmt"
  li "os"
)


运行程序方式

这里,我们可以通过编译器GoLand运行,也可以通过命令行go run “go文件名”进行控制台输出。


当然,我们还可以进行拆分,通过先编译后执行的命令行运行Hello World。代码如下所示:

go build HelloWorld.go
./HelloWorld


基础语法

Go程序由关键字、标识符、常量、字符串、符号等多种标记组成。一般来说,一行就是一个语句,但其不像Java等语言,不需要在最后用“;”结尾。


需要注意的是,如果你将多个Go语句写在一行,那么就需要使用“;”进行隔开。但官方不建议我们这样写,一行一个语句是标准,且比较易读的。


注释

Go语言的注释,其实与Java语言一模一样,也有单行注释与多行注释。其中,单行注释通过“//”声明。多行注释通过“/*”开头,"*/"结尾。具体代码如下所示:

//单行注释
/*
多行注释
*/


标识符

标识符主要用作变量、类型等程序实体进行命名。一个标识符由一个或者多个字母、数字、下划线("_")组成。需要注意的是,第一个字符不能是数字以及Go程序的关键字。


变量

在Go语言中,变量的声明语法如下:

var name type

其中,var是声明变量的关键字,name是变量名,type是变量的类型。


从这里,读者可以看出来,Go语言在声明变量时,与其他语言不同,它时将类型放在变量名称之后。


当然,有时候,一个个声明变量太麻烦,也会同时申请一大堆变量进行使用。声明多个变量的代码如下所示:

var(
  name string
  age int
  student string
)


除var关键字外,还可以使用简短的变量定义和初始化语法,格式如下:

名字 :=表达式
//示例
name :="liyuanjing"


需要注意的是,简短模式有以下限制:


1.只能用来定义变量,同时会显式初始化

2.不能提供数据类型

3.只能用在函数内部,即不能用来声明全局变量。


下面,博主直接用多个例子,来讲解变量的赋值方式。具体代码如下所示:

//完整语法
var name string = "liyuanjing"
//自动识别类型
var name = "liyuanjing"
//多变量赋值声明
var (
  name  string  = "liyuanjing"
  age   int     = 29
  money float32 = 22.22
)
var name,age,money="liyuanjing",29,22.22
//全局变量的声明
var global int=558


需要特别注意,如果你在某个方法中声明了变量,那么后续必须使用这个变量,不然程序就会报错。(也就是不用这个值,同样也会报错)


常量

在Go语言中,常量使用const进行声明,常量主要用于存储不会改变的值。需要注意的是,常量只能是布尔型、数字(整数、浮点数以及复数)、字符串。其语法与使用如下:

//语法
const 常量名 [类型]=常量值
//示例
const name string="liyuanjing"
const age int=22


在Go语言中,可以省略类型说明符"[类型]"。因为编译器可以根据变量的值来判断其类型。

//显式声明
const Pi float32=3.1415926
//隐式声明
const Pi =3.1415926


需要注意的是,常量的值必须是能够在编译时被确定的,可以在其赋值表达式中涉及计算过程。但是所有用于计算的值,必须在编译期间就能获得。比如3/2就可以,但如果os.GetEnv(‘url’)调用方法,就不行。因为方法调用只有在运行时才能知道返回结果。


常量声明有时候还可以使用常量生成器iota初始化。iota用于生成一组以相似规则初始化的常量,但是不用每行都写一遍初始化表达式。


这里要提前说一下,在Go语言中,是没有枚举类型的。我们通常就是通过iota进行枚举类型的实现。比如,现在我们需要定义东南西北4个枚举类型,那么可以直接这样实现:

type Direction int
  const(
  North Direction=iota
  East
  South
  West
)


如上面代码所示,默认North就是0,之后每一个值的常量自动被加1。


运算符

顾名思义,与其他语言一样都是计算。下面,我们随便举个例子就行:

var a,b,c int=1,2,3
d :=a+b*c


通过上面代码,我们可以很容易的计算出来,d等于7。

相关文章
|
5天前
|
JSON 测试技术 Go
零值在go语言和初始化数据
【7月更文挑战第10天】本文介绍在Go语言中如何初始化数据,未初始化的变量会有对应的零值:bool为`false`,int为`0`,byte和string为空,pointer、function、interface及channel为`nil`,slice和map也为`nil`。。本文档作为指南,帮助理解Go的数据结构和正确使用它们。
53 22
零值在go语言和初始化数据
|
7天前
|
安全 算法 程序员
在go语言中使用泛型和反射
【7月更文挑战第8天】本文介绍go支持泛型后,提升了代码复用,如操作切片、映射、通道的函数,以及自定义数据结构。 泛型适用于通用数据结构和函数,减少接口使用和类型断言。
68 1
在go语言中使用泛型和反射
|
9天前
|
缓存 编译器 Shell
回顾go语言基础中一些特别的概念
【7月更文挑战第6天】本文介绍Go语言基础涵盖包声明、导入、函数、变量、语句和表达式以及注释。零值可用类型如切片、互斥锁和缓冲,支持预分配容量以优化性能。
40 2
回顾go语言基础中一些特别的概念
|
13天前
|
存储 Go API
一个go语言编码的例子
【7月更文挑战第2天】本文介绍Go语言使用Unicode字符集和UTF-8编码。Go中,`unicode/utf8`包处理编码转换,如`EncodeRune`和`DecodeRune`。`golang.org/x/text`库支持更多编码转换,如GBK到UTF-8。编码规则覆盖7位至21位的不同长度码点。
115 1
一个go语言编码的例子
|
16天前
|
JSON 算法 测试技术
在go语言中调试程序
【6月更文挑战第29天】Go语言内置`testing`包支持单元测试、基准测试和模糊测试。`go test`命令可执行测试,如`-run`选择特定测试,`-bench`运行基准测试,`-fuzz`进行模糊测试。
37 2
在go语言中调试程序
|
5天前
|
JSON Java Go
Go 语言性能优化技巧
在Go语言中优化性能涉及数字字符串转换(如用`strconv.Itoa()`代替`fmt.Sprintf()`)、避免不必要的字符串到字节切片转换、预分配切片容量、使用`strings.Builder`拼接、有效利用并发(`goroutine`和`sync.WaitGroup`)、减少内存分配、对象重用(`sync.Pool`)、无锁编程、I/O缓冲、正则预编译和选择高效的序列化方法。这些策略能显著提升代码执行效率和系统资源利用率。
42 13
|
1天前
|
Cloud Native Java Go
为什么要学习Go语言?
GO logo的核心理念,即简单胜于复杂。使用现代斜体无衬线字体与三条简单的运动线相结合,形成一个类似于快速运动的两个轮子的标记,传达速度和效率。字母的圆形暗示了GO地鼠的眼睛,创造了一个熟悉的形状,让标记和吉祥物很好地搭配在一起。
12 4
|
5天前
|
设计模式 Go
Go语言设计模式:使用Option模式简化类的初始化
在Go语言中,面对构造函数参数过多导致的复杂性问题,可以采用Option模式。Option模式通过函数选项提供灵活的配置,增强了构造函数的可读性和可扩展性。以`Foo`为例,通过定义如`WithName`、`WithAge`、`WithDB`等设置器函数,调用者可以选择性地传递所需参数,避免了记忆参数顺序和类型。这种模式提升了代码的维护性和灵活性,特别是在处理多配置场景时。
41 8
|
7天前
|
前端开发 JavaScript Go
|
5天前
|
存储 Go
go语言中fmt格式化包和内置函数汇总
【7月更文挑战第10天】本文介绍fmt包和`Errorf`用于创建格式化的错误消息。`fmt`包还涉及一些接口,如`Formatter`、`GoStringer`、`ScanState`、`Scanner`和`Stringer`,支持自定义格式化和输入/输出处理。
17 1