注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料,将在公众号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 优快云_URL = "https://blog.youkuaiyun.com/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 优快云_URL = "https://blog.youkuaiyun.com/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(优快云_URL)
}
输出结果:
0
1
2
3
4
https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q
https://blog.youkuaiyun.com/zhouruifu2015/
2. case
case关键字用于在switch语句中匹配一个条件,并执行相应的语句块。在switch语句中,可以有多个case语句,每个case语句用于匹配一个条件。
示例代码:
func case_kw(){
var URL = "WEIXIN_URL"
switch URL {
case "优快云_URL":
fmt.Println(优快云_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 (
优快云_URL01 = "https://blog.youkuaiyun.com/zhouruifu2015/"
WEIXIN_URL01 = "https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q"
GIT_URL01 = "https://gitee.com/SteveRocket/practice_python.git"
)
func const_kw(){
优快云_URL = WEIXIN_URL
fmt.Println(优快云_URL)
//优快云_URL01 = WEIXIN_URL //错误用法 cannot assign to 优快云_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 "优快云_URL":
fmt.Println(优快云_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 优快云_URL{
fmt.Printf("%c", k)
}
fmt.Println("\nrun over...")
}
输出结果:
https://blog.youkuaiyun.com/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 := "优快云_URL"
switch URL {
case "优快云_URL":
fmt.Println(优快云_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.youkuaiyun.com/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":优快云_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.youkuaiyun.com/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.youkuaiyun.com/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(优快云_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.youkuaiyun.com/zhouruifu2015/
当times等于3时,就不进入goto里面的语句,直接执行下面的优快云_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":优快云_URL, "weixin":WEIXIN_URL, "git":GIT_URL}
for k,v := range maps {
fmt.Println(k, v)
}
maps := make(map[string]string)
// 先定义后初始化
maps["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.youkuaiyun.com/zhouruifu2015/
3
https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q
https://blog.youkuaiyun.com/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":优快云_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.youkuaiyun.com/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 "优快云_URL":
fmt.Println(优快云_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.youkuaiyun.com/zhouruifu2015/category_6915830
推荐阅读:
其他语言类型的关键字总结如下
- 看这一篇就够了 Python的35个关键字的含义、作用、特性以及使用方式详解
- 工作经验总结之C语言关键字的作用、特性和使用方式
- 工作经验总结之C++语言关键字的作用、特性和使用方式
- 工作总结之全网最全的103个Verilog关键字总结(上)
- 工作总结之全网最全的103个Verilog关键字总结(下)
更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。
关于公众号的描述访问如下链接