一文详解Go的25个关键字含义、用途和代码示例详解

注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料,将在公众号CTO Plus发布,请关注公众号:CTO Plus

一文详解Go的25个关键字含义、用途和代码示例详解

25个关键字The following keywords are reserved and may not be used as identifiers.

Go语言是一门开源的、静态类型的编程语言,由Google在2007年开始开发,于2009年正式发布。Go语言具有高效、简洁、安全、并发等特点,适合用于网络编程、分布式系统、云计算等领域。在Go语言中,有许多关键字,本文将介绍这些关键字的作用。

同样我们在代码前面定义一个外部的全局变量,便于后面的代码练习使用

var CSDN_URL = "https://blog.csdn.net/zhouruifu2015/"

var WEIXIN_URL = "https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q"

var GIT_URL = "https://gitee.com/SteveRocket/practice_python.git"

1. break

break关键字用于跳出循环语句,例如for循环和switch语句。在循环语句中,当满足某个条件时,可以使用break跳出循环,提前结束循环。

示例代码:

package main

import "fmt"

var CSDN_URL = "https://blog.csdn.net/zhouruifu2015/"
var WEIXIN_URL = "https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q"
var GIT_URL = "https://gitee.com/SteveRocket/practice_python.git"

func main() {
  for i := 0; i < 10; i++ {
    if i==5 {
      fmt.Println(WEIXIN_URL)
      break
    }
    fmt.Println(i)
  }
  fmt.Println(CSDN_URL)
}

输出结果:

0

1

2

3

4

https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

https://blog.csdn.net/zhouruifu2015/

2.    case

case关键字用于在switch语句中匹配一个条件,并执行相应的语句块。在switch语句中,可以有多个case语句,每个case语句用于匹配一个条件。

示例代码:

func case_kw(){
  var URL = "WEIXIN_URL"
  switch URL {
  case "CSDN_URL":
    fmt.Println(CSDN_URL)
  case "WEIXIN_URL":
    fmt.Println(WEIXIN_URL)
  case "GIT_URL":
    fmt.Println(GIT_URL)
  default:
    fmt.Println("is not url patterns")
  }
}

输出结果:

https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

3.    chan

chan关键字用于定义一个通道,通道是一种用于在多个goroutine之间传递数据的机制。通道可以是无缓冲的或有缓冲的,可以阻塞或非阻塞。

示例代码:

func chan_kw(age int){
  ch:=make(chan int)
  go func(){
    ch <- age
  }()
  fmt.Println(<-ch)
}

输出结果:

26

4.    const

const关键字用于定义一个常量,常量是在程序运行时不可修改的值。常量可以是数值、布尔值、字符串等。

示例代码:

const PI = 3.1415926
const (
    CSDN_URL01 = "https://blog.csdn.net/zhouruifu2015/"
    WEIXIN_URL01 = "https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q"
    GIT_URL01 = "https://gitee.com/SteveRocket/practice_python.git"
)

func const_kw(){
  CSDN_URL = WEIXIN_URL
  fmt.Println(CSDN_URL)

  //CSDN_URL01 = WEIXIN_URL //错误用法 cannot assign to CSDN_URL01
}

5.    continue

continue关键字用于跳过当前循环中的剩余语句,进入下一次循环。在循环语句中,当满足某个条件时,可以使用continue跳过当前循环。

示例代码:

func continue_kw(){
  fmt.Println(WEIXIN_URL01)
  // 遍历字符串常量
  for _, v := range WEIXIN_URL01{
    // 遇到 . 则跳过  实现过滤指定字符
    //fmt.Println(string(rune(v)))
    if (string(rune(v)) == ".") {
      //fmt.Println("跳过点符号", v)
      continue
    }
    fmt.Printf("%c",v)
  }

  
  const count int = 20
  for i := 0; i < count; i++ {
    if(i % 5 == 0){
      fmt.Println("整除,跳过", i)
      continue
    }
    fmt.Println("无法整除:", i)
  }
}

输出结果:

https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

https://mpweixinqqcom/s/0yqGBPbOI6QxHqK17WxU8Q整除,跳过 0

无法整除: 1

无法整除: 2

无法整除: 3

无法整除: 4

整除,跳过 5

无法整除: 6

无法整除: 7

无法整除: 8

无法整除: 9

整除,跳过 10

无法整除: 11

无法整除: 12

无法整除: 13

无法整除: 14

整除,跳过 15

无法整除: 16

无法整除: 17

无法整除: 18

无法整除: 19

上面的代码示例分别演示了通过结合continue关键字和字符串的遍历来过滤掉指定字符,关于go的字符串转操作详细介绍参考Go进阶:9. rune的作用、功能特性、底层原理和代码示例的详细介绍。以及循环遍历数字跳过能被5整除的数字。

6.    default

default关键字用于在switch语句中匹配一个默认条件,并执行相应的语句块。在switch语句中,可以有一个default语句,用于匹配所有未被其他case语句匹配的条件。

示例代码:

func case_kw(){
  /*
  4. var
  var关键字用于定义一个变量,变量可以是基本类型、结构体、数组、切片等。变量可以在函数内部或包级别定义。
  */
  //var URL = "WEIXIN_URL"
  URL := "DOMAIN"
  switch URL {
  case "CSDN_URL":
    fmt.Println(CSDN_URL)
  case "WEIXIN_URL":
    fmt.Println(WEIXIN_URL)
  case "GIT_URL":
    fmt.Println(GIT_URL)
  //default关键字用于在switch语句中匹配一个默认条件,并执行相应的语句块。
  default:
    fmt.Println("is not url patterns")
  }
}

输出结果:

is not url patterns

7.    defer

defer是Go语言中的一个关键字,用于在函数返回之前执行一些操作,例如关闭文件、释放资源等。defer语句按照后进先出的顺序执行。defer可以用于延迟函数的执行,它会将函数放入一个栈中,在函数结束时按照先进后出的顺序执行。

defer的语法如下:

defer function(parameters)

其中,function表示要延迟执行的函数,parameters表示函数的参数。

defer的作用是在函数结束前执行一个函数。defer语句会被放入一个栈中,当函数结束时,栈中的defer语句会按照先进后出的顺序执行。defer语句可以用于释放资源、记录日志、处理错误等操作。

使用defer延迟函数的执行的语法如下:

func defer_kw(){
  defer fmt.Println(WEIXIN_URL)
  for _,k := range CSDN_URL{
    fmt.Printf("%c", k)
  }
  fmt.Println("\nrun over...")
}

输出结果:

https://blog.csdn.net/zhouruifu2015/

run over...

https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

当调用defer_kw函数时,会先执行for循环的语句以及fmt.Println("\nrun over...")语句,然后执行defer fmt.Println("deferred statement")语句。

8.    else

else关键字用于在if语句中匹配一个否定条件,并执行相应的语句块。在if语句中,可以有一个else语句,用于匹配所有未被if语句匹配的条件。

示例代码:

if score >= 60 {
    fmt.Println("pass")
} else {
    fmt.Println("fail")
}

输出结果:

pass

9.    fallthrough

fallthrough关键字用于在switch语句中,将控制流程转移到下一个case语句中,并执行相应的语句块。使用fallthrough关键字时,需要注意,它只能用于switch语句中的case语句,且必须是case语句中的最后一条语句。

示例代码:

func fallthrough_kw(){
  URL := "CSDN_URL"
  switch URL {
  case "CSDN_URL":
    fmt.Println(CSDN_URL)
    fallthrough
  case "WEIXIN_URL":
    fmt.Println(WEIXIN_URL)
  case "GIT_URL":
    fmt.Println(GIT_URL)
  default:
    fmt.Println("is not url patterns")
  }
}

输出结果:

https://blog.csdn.net/zhouruifu2015/

https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

10.      for

for关键字用于实现循环结构,可以用于遍历字符串、数组、切片、映射等数据结构,也可以用于实现无限循环。

示例代码:

func for_kw(){
  // 遍历字符串
  for _,v := range WEIXIN_URL{
    fmt.Printf("%c", v)
  }
  fmt.Println()

  for i := 0; i < 4; i++ {
    fmt.Print(i)
  }
  fmt.Println()

  //数组
  arr := [5]int{11, 22, 33, 44, 55}
  for i := 0; i < len(arr); i++ {
    fmt.Printf("%d\t", arr[i])
  }
  fmt.Println()

  //切片
  slice := []int{1,2,3,4,5}
  for i := 0; i < len(slice); i++ {
    fmt.Printf("%d\t", slice[i])
  }
  fmt.Println()

  //映射
  maps := map[string]string{"csdn":CSDN_URL, "weixin":WEIXIN_URL, "git":GIT_URL}
  for k,v := range maps {
    fmt.Println(k, v)
  }
}

输出结果:

https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

0123

11 22    33    44    55   

1 2     3     4     5    

csdn https://blog.csdn.net/zhouruifu2015/

weixin https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

git https://gitee.com/SteveRocket/practice_python.git

11.      func

func关键字用于定义一个函数,函数是一段可重用的代码块,用于执行特定的任务。函数可以带有参数和返回值。

示例代码:

func func_kw(num1, num2 int, name string) int{
  fmt.Println("Hello,", name)
  return num1 + num2
}
fmt.Println(func_kw(11,22,"steverocket"))

输出结果:

Hello, steverocket

33

12.      go

go关键字用于启动一个新的goroutine,goroutine是一种轻量级的线程,可以在程序中并发执行多个任务。由于是新开一个线程,所以它的运行与主线程是并行的。

示例代码:

func go_kw1(){  
  /*
  12. go
  go关键字用于启动一个新的并发线程,以便在后台执行一个函数。使用go关键字可以实现并发编程。
  */
  go func(){
    fmt.Println(WEIXIN_URL)
  }()
}

func go_kw2(){  
  for i := 0; i < 10; i++ {
    go func(){
      fmt.Println(WEIXIN_URL)
    }()
  }
  runtime.Gosched()
}

go_kw1()
go_kw2()
//如果直接如上调用不加下面的等待时间,则看不到输出内容
time.Sleep(time.Second * 3)

输出顺序不一定如下顺序则就对了,输出结果示例如下:

https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

https://blog.csdn.net/zhouruifu2015/

13.      goto

goto关键字用于无条件跳转到指定的标签处执行代码,可以用于跳出多层循环或实现异常处理等功能。但是,由于goto语句会破坏程序的结构,使得代码难以理解和维护,因此应该尽量避免使用。

示例代码:

func goto_kw(){
  times := 0
  Here:
    fmt.Println("this is ", times , WEIXIN_URL)
    times += 1
    if times < 3 {
      goto Here
    }
    fmt.Println(CSDN_URL)
}

输出结果:

this is0 https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

this is1 https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

this is2 https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

https://blog.csdn.net/zhouruifu2015/

当times等于3时,就不进入goto里面的语句,直接执行下面的CSDN_URL输出语句,结束程序。

14.      if

if关键字用于根据条件执行相应的语句块。if语句可以带有一个可选的else语句,用于在条件不成立时执行相应的语句块。

示例代码:

if score >= 60 {
    fmt.Println("pass")
} else {
    fmt.Println("fail")
}

输出结果:

pass

15.      import

import关键字用于导入一个包,包是一组相关的Go程序文件,用于组织和管理代码。在Go程序中,可以使用import关键字导入其他包中的函数、变量和类型等。

示例代码:

import "fmt"

fmt.Println(WEIXIN_URL)

输出结果:

https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

16.      interface

interface关键字用于定义一个接口,接口是一组方法的集合,用于描述对象的行为。在Go语言中,接口是一种非常重要的概念,它可以实现多态性,使得程序具有更好的可扩展性和灵活性。

示例代码:

type Shape interface {
    Area() float64
    Perimeter() float64
}

17.      map

map关键字用于定义一个映射,映射是一种键值对的集合,可以用于存储和访问数据。在Go语言中,映射是一种内置的数据结构,可以使用make函数创建。

示例代码:

  //定义的同时初始化
maps := map[string]string{"csdn":CSDN_URL, "weixin":WEIXIN_URL, "git":GIT_URL}
  for k,v := range maps {
    fmt.Println(k, v)
  }

  maps := make(map[string]string)
// 先定义后初始化
  maps["csdn"] = CSDN_URL
  maps["weixin"] = WEIXIN_URL
  maps["git"] = GIT_URL
  fmt.Println(len(maps))
  fmt.Println(maps["weixin"])
  fmt.Println(maps["csdn"])

输出结果:

weixin https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

git https://gitee.com/SteveRocket/practice_python.git

csdn https://blog.csdn.net/zhouruifu2015/

3

https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

https://blog.csdn.net/zhouruifu2015/

18.      package

package关键字用于定义一个包,包是一组相关的Go程序文件,用于组织和管理代码。在Go程序中,每个文件都必须属于一个包,可以使用package关键字指定包的名称。

示例代码:

package main

import "fmt"

var WEIXIN_URL = "https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q"

func main() {

fmt.Println(WEIXIN_URL)

}

输出结果:

https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

19.      range

range关键字用于遍历一个字符串、数组、切片、映射等数据结构,可以获取每个元素的值和索引。在遍历映射时,range关键字返回的是键值对。

示例代码:
 

a := []int{1, 2, 3}
for i, v := range a {
    fmt.Println(i, v)
}

maps := map[string]string{"csdn":CSDN_URL, "weixin":WEIXIN_URL, "git":GIT_URL}
for k,v := range maps {
	fmt.Println(k, v)
}

输出结果:

0 1

1 2

2 3

weixin https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

git https://gitee.com/SteveRocket/practice_python.git

csdn https://blog.csdn.net/zhouruifu2015/

20.      return

return关键字用于从函数中返回一个值或多个值,可以用于结束函数的执行。在Go语言中,函数可以返回多个值,可以使用括号将多个返回值括起来。

示例代码:

func return_kw(num1, num2 int, url string)(int, error){
  fmt.Println("this is ", url)
  if num1<0 || num2<0 {
    return 0, errors.New("invalid argument")
  }
  return num1 + num2, nil
}
func main() {
  result, err := return_kw(0, 13, WEIXIN_URL)
  if err != nil {
    fmt.Println(err)
  } else {
    fmt.Println(result)
  }
  fmt.Println(return_kw(0, 13, WEIXIN_URL))
  fmt.Println(return_kw(11, 22, WEIXIN_URL))
}

输出结果:

this ishttps://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

13

this ishttps://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

13 <nil>

this ishttps://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

33 <nil>

21.      select

select关键字用于实现多路复用,可以同时等待多个通道的数据。在select语句中,可以使用case语句监听多个通道,当其中任意一个通道有数据可读时,就执行相应的语句块。

示例代码:

func select_kw(){
  c1 := make(chan string)
  c2 := make(chan int)
  go func ()  {
    c1 <- WEIXIN_URL
  }()

  go func ()  {
    c2 <- 25
  }()

  select{
  case c:= <- c1:
    fmt.Println(c)
  case c:= <- c2:
    fmt.Println(c)
  }
}

输出结果:

https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

22.      struct

struct关键字用于定义一个结构体,结构体是一种自定义的数据类型,可以包含多个字段,每个字段可以是不同的数据类型。在Go语言中,结构体是一种非常重要的数据类型,可以用于组织和管理数据。

示例代码:

func struct_kw(){
  type Person struct {
    Name string
    Age int
    Blog string
  }

  p:=Person{"Steverocket", 25, WEIXIN_URL}
  fmt.Println("My name is", p.Name , ". age is", p.Age, ". this is my blog", p.Blog)
}

输出结果:

My name is Steverocket . age is 25 . this is my blog https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

23.      switch

switch关键字用于根据不同的条件执行相应的语句块。在switch语句中,可以使用case语句监听不同的条件,当条件匹配时,就执行相应的语句块。如果所有条件都不匹配,就执行default语句块。

示例代码:

func case_kw(){
  URL := "DOMAIN"
  switch URL {
  case "CSDN_URL":
    fmt.Println(CSDN_URL)
  case "WEIXIN_URL":
    fmt.Println(WEIXIN_URL)
  case "GIT_URL":
    fmt.Println(GIT_URL)
  //default关键字用于在switch语句中匹配一个默认条件,并执行相应的语句块。
  default:
    fmt.Println("is not url patterns")
  }
}

输出结果:

is not url patterns

24.      type

type关键字用于定义一个类型,类型是一种数据的抽象表示,用于描述数据的属性和行为。在Go语言中,可以使用type关键字定义基本类型、结构体类型、函数类型等。

示例代码:

func type_kw(){
  //定义结构体类型
  type Person struct {
    Name string
    Age int
    Blog string
  }

  //定义基本类型
  type MyInt int
  var age MyInt = 25
  fmt.Println(age)
}

输出结果:

25

25.      var

var关键字用于定义一个变量,变量是一种存储数据的容器,可以用于存储和访问数据。在Go语言中,变量可以是基本类型、结构体类型、指针类型等。

示例代码:

func var_kw(){
  // 定义基本类型
  var age int = 25
  var blog string = WEIXIN_URL
  fmt.Println(age, blog)

  // 定义指针
  var ptr *int = &age
  fmt.Println(*ptr)
}

输出结果:

25 https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

25

总结

Go语言中的关键字是编写程序的基本构建块,它们具有不同的作用。通过使用这些关键字,可以定义变量、函数、类型、接口、映射、包、遍历数据结构、返回值、多路复用、结构体、条件语句、类型、变量、跳出循环、匹配条件、定义通道、定义常量、跳过循环、匹配默认条件、在函数返回前执行操作、匹配否定条件、在switch语句中转移控制流、实现循环结构、定义函数、启动goroutine、跳转到指定标签处执行代码、根据条件执行语句块、导入其他包中的函数和类型、定义接口等,实现不同的功能。在实际编程中,我们应该根据具体需求选择合适的关键字,编写高效、简洁、安全、并发的Go程序。

Go专栏:

https://blog.csdn.net/zhouruifu2015/category_6915830

推荐阅读:

其他语言类型的关键字总结如下


更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。

关于公众号的描述访问如下链接



关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个有深度和广度的技术圈。”一直以来都想把专业领域的技https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SteveRocket

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值