TypechoJoeTheme

FareCloud专注技术填坑

统计

会编程的羽流云

网站页面

二、Go语言基础入门——Go基础语法与使用

2021-07-13
/
1 评论
/
802 阅读
/
正在检测是否收录...
07/13

前言

最近买了两本书准备学习一下Go语言,其中一本是《Go语言高并发与微服务实战》另外一本是《Go Web编程实战派》,第一本是为了深入了解一下Go语言在高并发中的魅力,买第二本的原因是因为刚刚从Java转到Go语言,所以想更快的学习一些工作中可能接触到的Go Web相关的知识。

众所周知,Go语言是Google于2009年开源的一门编程语言,原名GoLanguage也叫Golang。它可以在不损失应用程序性能的情况下极大地降低代码的复杂度。相比较其他编程语言,它具备了简洁、快速、安全、并行、有趣、开源、内存管理、数组安全、编译迅速等等一些列特点。

话不多少,我会先学习《Go Web编程实战派》这本书,跟随我一起走进Go语言学习的海洋吧!!!

# 基础语法

我们以及完成了Go语言的第一个程序,接下来本章博客将从Go语言的基础语法以及使用方面进行学习,虽然这些知识对于有其他语言开发经验的同学很简单,但我相信还还会从中发现更多知识点。

## 行分隔符

在Go语言中,并不需要像Java、PHP等语言那样需要在一行语句的最后使用分号结尾,因为这些工作编译器已经帮我们完成了。但是如果在同一行有多条语句,那就必须使用分号进行分隔。但是这种方式在实际开发中并不鼓励书写哦!

## 注释

注释分为单行与多行,格式如下

单行注释:单行注释是最常见的注释形式,可以在任何地方进行使用。

//单行注释

多行注释:也被称之为“块注释”。

/*
多行注释

多行注释
*/

标识符

标识符通常用来对变量、类型等程序实体进行命名。一个标识符实际上就是一个或者多个字符、数字、下划线组成的。第一个字符不能为数字或者Go的关键字。

正确命名:product、user、add、user_name、abc_123、resultValue、_tmp、k
错误命名:switch(Go语言关键字)、3ab(以数字开头)、c-d(运算符不允许)

字符串连接

Go语言可以通过加号实现字符串拼接,示例如下:

package main

import (
    "fmt"
)

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

## 关键字

在Go语言中有25个关键字或保留字

关键词如下

关键字关键字关键字关键字关键字
continueforimportreturnvar
constfallthroughifrangetype
chanelsegotopackageswitch
casedefergomapstruct
breakdefaultfuncinterfaceselect

最新版本Go语言中还有30几个预定义标识符,可以按照以下划分:

常量相关预定义标识符:true、false、iota、nil

类型相关预定义标识符:int、int8、int16、in32、int64、uint、uint8、uint16、uint32、uint64、uintpr、float32、float64、complex128、complex64、bool、byte、rune、string、error

函数相关预定义标识符:make、len、cap、new、append、copy、close、delete、complex、reat、image、panic、revover

变量

声明

Go语言是静态强类型语言,因此变量是有明确类型的,编译器也会检查变量类型的正确性。当一个变量被声明后,系统会自动赋予它该类型的零值或者空值(int->0、float->0.0、bool->false、string->空字符串、指针类型->nil)。变量的命名规则依旧遵循“驼峰”命名法。变量的声明可以分为标准格式、批量格式、简短格式这三种形式。

标准格式

var 变量名 变量类型

变量声明以var开头,中间是变量名 后面是变量类型

批量格式

var(

age int

name string

balance float32

简短格式

名字 := 表达式

需要注意,简短模式有一下的限制

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

不能提供数据类型

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

赋值

给单个变量赋值

var 变量名 [类型] = 变量值

eg

var name string = "zhuangyan"

var name = "zhuangyan"

name := "zhuangyan"

给多个变量赋值

var(

​ 变量名1 (变量类型) = 变量值1

​ 变量名2 (变量类型) = 变量值2

​ ......

)

或者

var 变量名1,变量名2,变量名3 = 变量值1,变量值2,变量值3

或者

变量名1,变量名2,变量名3 := 变量值1,变量值2,变量值3

变量作用域

Go语言变量可以分为局部变量和全局变量。

局部变量:在函数体中被声明的变量被称为局部变量,作用域自在函数体内。

package main

import "fmt"

func main() {
   //声明局部变量
   var local1, local2, local3 int

   //初始化参数
   local1 = 1
   local2 = 2
   local3 = 3

   fmt.Printf("local1 = %d, local2 = %d ,local3 = %d", local1, local2, local3)
}

运行结果
local1 = 1, local2 = 2 ,local3 = 3

全局变量:在函数体外声明的变量被称为全局变量。全局变量可以在整个包甚至在外部包(被导出后)中使用,也可以在任何函数中使用。全局变量和局部变量的名称可以相同,但是函数内部的局部变量会被优先考虑。

package main

import "fmt"

//声明全局变量
var global int
var local3 int = 333

func main() {
    //声明局部变量
    var local1, local2, local3 int

    //初始化参数
    local1 = 1
    local2 = 2
    local3 = 3
    global = 4

    fmt.Printf("local1 = %d, local2 = %d ,local3 = %d, global = %d", local1, local2, local3, global)
}

运行结果
local1 = 1, local2 = 2 ,local3 = 3, global = 4

常量

常量的声明

Go语言的常量使用关键字const声明。常量实在编译时才被创建,即便声明在函数内部也是如此,并且只能是布尔型、数字型(整数型、浮点型和复数)和字符串型。由于编译期有限制,声明常量的表单时必须为能被编译器求值的常量表达式。格式如下

const 常量名 [类型] = 常量值

或者

const(

​ 常量名1 [类型] = 常量值1

​ 常量名2 [类型] = 常量值2

)

eg

正确做法:const pi = 3.14159 、 const c1 = 5/2

错误做法:const url = os.GetEnc("url") 错误原因:os.GetEnc("url") 只有在运行期才能知道返回结果

常量生成器iota

常量声明可以使用常量生成器iota初始化。iota用于生成一组以相似规则初始化的常量,但是不需要每一行进行初始化表达式。可以在const声明语句的第一行使用iota,之后美增加一行iota会加1,并且每出现一个新的const声明语句iota会重新被初始化为0。

举个例子

package main

import "fmt"

//声明常量
const (
   North int = iota
   East
   South
   West
)

func main(){
   fmt.Printf("North = %d, East = %d ,South = %d, West = %d", North, East, South, West)
}

运行结果
North = 0, East = 1 ,South = 2, West = 3

流程控制语句

if-else(分支结构)

常见的书写方式有一下几种

if b > 10 {
   fmt.Println("b大于10")
}
或者
if b > 10 {
   fmt.Println("b大于10")
} else {
   fmt.Println("b小于等于10")
}
或者
if b > 10 {
   fmt.Println("b大于10")
} else if b == 10 {
   fmt.Println("b等于10")
} else {
   fmt.Printf("b小于10")
}
需要注意

关键字if和else之后的左大括号必须和关键字在同一行,如果使用了else-if结构,那么前一段代码的右大括号必须和else if语句在同一行,这个是强制的规则,不满足则编译不通过

for循环

与大多数语言不同的是,Go中的循环语句只支持for关键字,不支持while和do-while结构。关键字for的基本用法与C语言和C++语言非常接近:

product := 1

for i :=1; i < 5; i++ {

   product *= 1

}

可以看到很大的不同就是for后面的表达式不需要使用括号括起来了,Go语言还进一步考虑无线循环的场景,让开发者不需要写for(;;)和do{}-while(),直接间换乘一下写法

i := 0

for {
   i++
   if i > 50 {
      break
   }
}
或者可以简化为
var i int
for i <= 50 {
    i++
}
在使用循环语句时,需要注意一下几点

左大括号必须与for处于同一行

Go语言中for循环和c一样,都允许在循环条件中定义和初始化变量。唯一的区别是,Go语言不支持以逗号为检核的多赋值语句,必须使用平行赋值的方式来初始化多个变量

Go语言的for循环同样支持continue和break来控制循环,但是他提供了更高级的break——可以选择中断哪一个循环,如下例:

JumpLoop:
   for i := 0; i < 10; i++ {
      for j := 0; j < 10; j++ {
         if j == 5 {
            break JumpLoop
         }
         fmt.Println(j)
      }
   }

for-range循环

for-range循环结构是Go语言的一种迭代结构,其应用十分的广泛。for-range可以遍历数组、切片、字符串、map及通道(channel)。 一般形式如下:

for key, val := range 复合变量值 {

​ //...逻辑语句

}

需要注意的是,val始终为集合中对应索引值的复制值。所以对他所做的修改都不会影响集合原有的值。

通过for-range遍历的返回值有一定的规律:

数组、切片、字符串返回索引和值

map返回键和值

通道只返回通道内的值

package main

import "fmt"

func main() {
   //遍历数组、切片
   //key,value代表切片的下标和下标所对应的值
   fmt.Printf("遍历数组、切片\n")
   for key, value := range []int{0, 1, -1, -2} {
      fmt.Printf("key:%d value:%d\n", key, value)
   }

   //遍历字符串
   //key,value分别代表字符串的索引和索引对应的字符
   fmt.Printf("\n遍历字符串\n")
   var str = "hi 加油"
   for key, value := range str {
      fmt.Printf("key:%d value:0x%x\n", key, value)
   }
   //变量中的value的实际值为rune类型,以16进制打印字符的编码

   //遍历map
   //key,value分别代表map的索引建和索引键对应的值
   //在对map遍历时输出的键值是无序的,如果需要有序则需要对结果排序
   fmt.Printf("\n遍历map\n")
   m := map[string]int{
      "go":   100,
      "java": 100,
   }
   for key, value := range m {
      fmt.Println(key, value)
   }

   //遍历channel
   //在遍历通道时只输出一个值,即通道所对应类型的值数据
   fmt.Printf("\n遍历channel\n")
   c := make(chan int)
   go func() {
      c <- 7
      c <- 8
      c <- 9
      close(c)
   }()
   for v := range c {
      fmt.Println(v)
   }
}


运行结果:
遍历数组、切片
key:0 value:0
key:1 value:1
key:2 value:-1
key:3 value:-2

遍历字符串
key:0 value:0x68
key:1 value:0x69
key:2 value:0x20
key:3 value:0x52a0
key:6 value:0x6cb9

遍历map
go 100
java 100

遍历channel
7
8
9

在使用for-range循环遍历某个对象的时候,往往不会同时使用到key和value的值,而是使用其中的一个值,这个时候可以采用一些技巧让代码变得更简单。

比如将前面的map遍历修改一下:

fmt.Printf("\n遍历map\n")
m := map[string]int{
   "go":   100,
   "java": 100,
}
for _, value := range m {
   fmt.Println(value)
}

运行结果:
遍历map
100
100

上面的修改我们将key修改为(_),这个下划线就是匿名变量,可以理解为占位符。匿名变量本身不参加空间分配,也不会占用一个变量名称。

switch-case语句

Go语言中的switch-case语句要比C语言的switch-case语句更加通用,表达式的值不必为常量,甚至不必为整数。

Go语言改进了传统的switch-case语句的语法设计,case与case之间是独立的代码块,不需要通过break语句去避免执行到下一行。

var a = "love"
switch a {
case "love":
   fmt.Println("love")
case "programming":
   fmt.Println("programming")
default:
   fmt.Println("none")
}

运行结果:
love

当然,Go语言还支持一些新的写法

一个分支多个值

分支表达式

eg:

1、
var a = "love"
switch a {
case "love","like":
   fmt.Println("love")
case "programming":
   fmt.Println("programming")
default:
   fmt.Println("none")
}

2、
var r int = 6
    switch {
    case r > 1 && r < 10:
        fmt.Println(r)
    }

goto

在Go语言中,可以通过goto语句跳转到标签,进行代码之间的无条件跳转。另外,goto语句在快速跳出循环、避免重复退出方面也有一定的帮助。使用goto语句能够简化一些代码的实现过程。

在满足条件的时候,如果需要连续退出两层代码,则需要传统编码方式:

    a := []int{0, 1, -1, -2, -3};
    var flag = false
    for key,value :=range a {
        for key1,value2 := range a {
            if key == 2 {
                fmt.Printf("%d %d",key,value)
            }
            if key1 == 3 {
                flag = true
                break
            }
            fmt.Printf("%d %d",key1,value2)
        }
        if flag {
            break
        }
    }

将上面的代码使用Go语言的goto进行优化:

    a := []int{0, 1, -1, -2, -3};
    for key,value := range a {
        for key1,value2 := range a {
            if key == 2 {
                fmt.Printf("第一处打印:%d %d\n",key,value)
            }
            if key1 == 3 {
                goto breakTag
            }
            fmt.Printf("第二处打印%d %d",key1,value2)
        }

        breakTag:
            fmt.Printf("\n")
    }

在上述的代码中,我们使用goto语句“goto breakTag”来跳转到指明的标签处。breakTag是自定义的标签。上述代码中的标签只能被goto使用,不影响代码块的执行流程。在定义breakTag标签之前有一个return语句,此处如果手动返回,则在不满足条件的时候也会执行breakTag代码。

在日常开发中,经常会遇到“多错误处理”的问题,在多错误处理往往存在很多重复的问题:

    err := getUserInfo()
    if err != nil {
        fmt.Printf(err)
        exitProeccess()
        return
    }
    
    err = getEmail()
    if err != nil{
        fmt.Printf(err)
        exitProeccess()
        return
    }
    
    //......

    fmt.Printf("over")

在上述的代码中我们有很多重复的代码。如果后期我们继续增加条件,则需要重复的去去编写雷同代码进行重复修改,极容易出现疏忽或遗漏。这个时候我们可以使用goto语句进行处理:

    err := getUserInfo()
    if err != nil {
        goto breakTag

    }

    err = getEmail()
    if err != nil{
        goto breakTag
    }

    breakTag:
        fmt.Printf(err)
        exitProeccess()
        fmt.Printf("over")
        return

break

Go语言中break语句可以结束for、switch和select的代码块。另外还可以在break语句后面添加标签,表示退出某个便签对应的代码块。田间的标签必须定义在对应的for、switch和select的代码块上。

JumpLoop:
   for i := 0; i < 10; i++ {
      for j := 0; j < 10; j++ {
         if j == 5 {
            break JumpLoop
         }
         fmt.Println(j)
      }
   }

continue

在Go语言中,continue语句是用来结束当前循环,并开始下一次的循环迭代过程。它仅限在for循环中使用。在continue语句后面添加标签,表示结束结束标签对应的语句的当前循环,并开始下一次的外层循环。

    for y := 0; y < 2; y++ {
            outerLoop:
                for x := 0;x < 2 ; x++  {
                    for i := 0; i < 3 ;i++  {
                        for j := 0 ; j < 5 ;j++  {
                            switch j {
                            case 3:
                                fmt.Println(y,x,i,j)
                                continue outerLoop
                            }
                        }
                    }
                }
        }
Go语言
朗读
赞(0)
版权属于:

FareCloud专注技术填坑

本文链接:

https://www.zachariah.cn/archives/53.html(转载时请注明本文出处及文章链接)

评论 (1)
  1. Leefs 作者
    Windows 10 · Google Chrome

    我来了

    2021-07-17 回复

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

最新回复

  1. 李林超
    2021-07-21
  2. Leefs
    2021-07-17
  3. Leefs
    2021-06-28
  4. 马某人
    2021-01-09

    {!{data:image/png;base64,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}!}

  5. 吴萌
    2021-01-08

标签云