微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Go语言学习笔记(语法篇) - 控制结构

Go语言的控制结构比Java、C语言都要少,只有很简单的几个,语法与也略有不同。

Go语言的保留关键字

break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var

运算符

* / %<< >> & &^+ - | ^ && || !

if

if中的条件不需要用中括号()给包含起来。

a := 1
b := 2
c := 3
if a < b && b < c {
fmt.Println(true)
} else {
fmt.Println(false)
}

而且if接受初始化语句,初始化的变量为一个局部变量。

if f,err := os.Open("c:/hello.go"); err == nil {
fmt.Println(f.Name())
} else {
fmt.Println(err)
}

goto

在Java里这是一个保留关键字,但没有任何实际作用。goto用不好容易造成程序的逻辑混乱。下面用Lable标识一个标签,goto可以将执行跳转到这个标签位置,注意标签是大小写敏感的。

func myfunc() {
i := 0
Lable:
fmt.Println(i)
i++
if i < 10 {
goto Lable
}
}

for

Go中没有while,do while循环,只有一个for,不过却可以完成各种灵活循环操作,同样也不需要中括号包含。
依旧有break,continue关键字,用法和其它语言一样。

func main() {
//跟Java相似的for循环
for i := 0; i < 10; i++ {
fmt.Println(i)
}
//与While一样
for false {
	
}
/死循环
for {
	
}  
Here:
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
	fmt.Println(j)
	if j > 5 {
	break Here
	}
}
}
}

range

range可以用于对集合的循环,集合后面在继续学习,先看一下用range来遍历数组。

var ss []string = []string{"aaa","bbb","ccc","ddd"}
for i,v := range ss {
fmt.Printf("索引是%d,值是:%s\n",i,v)
}


switch

Go的switch很灵活,不一定非要用常量,还支持表达式,下面一组代码片断是判断常量的。

func main() {
i := 0
switch i {
case 0:
//如果不加这个关键字,如果i等于0不会进到下面的case 1中
fallthrough
case 1:
fmt.Println(111)
}
}
func main() {
ch := 'b'
switch ch {
//多个值用逗号分隔
case 'a','b','c':
fmt.Println(111)
default:
fmt.Println(222)
}
}
下面这段代码是 case表达式的
func main() {
i := 10
switch {
case i < 10:
fmt.Println(111)
case i < 20:
fmt.Println(222)
default:
fmt.Println(333)
}
}
非常灵活、强大的switch,但是也给我带来一个疑问,Go的编译器怎么对switch进行编译优化呢,假如说一个switch其中有几百甚至上千个case,起不是要按照顺序一个一个去匹配,时间复杂度就变成O(N)了,常量的switch好处就是可以让时间复杂度变成O(1)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


1、Golang指针 在介绍Golang指针隐式间接引用前,先简单说下Go 语言的指针 (Pointer),一个指针可以指向任何一个值的内存地址 它指向那个值的内存地址,在 32 位机器上占用 4 个字节,在 64 位机器上占用 8 个字节,并且与它所指向的值的大小无关。大致上理解如下: 变量名前的
1、概述 1.1&#160;Protocol buffers定义 Protocol buffers 是语言中立、平台中立、可扩展的结构化数据序列化机制,就像 XML,但是它更小、更快、更简单。你只需定义一次数据的结构化方式,然后就可以使用特殊生成的源代码轻松地将结构化数据写入和读取各种数据流,支持各
判断文件是否存在,需要用到"os"包中的两个函数: os.Stat()和os.IsNotExit() func Stat(name string) (FileInfo, error) Stat返回描述文件f的FileInfo类型值。如果出错,错误底层类型是*PathError。 func IsNot
1、编译环境 OS :Loongnix-Server Linux release 8.3 CPU指令集 :&#160;loongarch64 平台 : 龙芯 go版本 :&#160;go version go1.15.6 linux/loong64 2、go和docker安装 docker安装: y
1、概述 Golang是一种强类型语言,虽然在代码中经常看到i:=12这种写法,这其实是编译器在编译期间自动做了类型推断。编译器会对数据进行类型检查,不同类型的数据不能赋值,不能在函数中传参。强类型语言有一些优势,很多的错误会在编译期间被检查出来,不像php和python等弱类型语言,很多错误只有运
1、概述 在《Golang常用语法糖》这篇博文中我们讲解Golang中常用的12种语法糖,在本文我们主要讲解下接收者方法语法糖。 在介绍Golang接收者方法语法糖前,先简单说下Go 语言的指针 (Pointer),大致上理解如下: 变量名前的 &amp;&#160;符号,是取变量的内存地址,不是取
1、概述 1.1 什么是gRPC RPC的全称是Remote Procedure Call,远程过程调用。RPC是一种协议,它实际是提供了一套机制,使得应用程序之间可以进行通信,而且也遵从server/client模型。使用的时候客户端调用server端提供的接口就像是调用本地的函数一样。 而gRP
1、概述 在Golang语言中,函数也是一种数据类型,可以赋值给一个变量,则该变量就是一个函数类型的变量了。通过该变量可以对函数调用。 2、Go语言函数变量详解 定义 func fun() { } var f func() f = fun 说明 我们首先定义了一个 fun 的函数,接着我们声明了一个
1、概述 Swagger是全球最大的OpenAPI规范(OAS)API开发工具框架,支持从设计和文档到测试和部署的整个API生命周期的开发。Swagger是目前最受欢迎的RESTful Api文档生成工具之一,主要的原因如下: 跨平台、跨语言的支持 强大的社区 生态圈 Swagger Tools(S
1、 概述 Protocol buffers 是语言中立、平台中立、可扩展的结构化数据序列化机制,就像 XML,但是它更小、更快、更简单。你只需定义一次数据的结构化方式,然后就可以使用特殊生成的源代码轻松地将结构化数据写入和读取各种数据流,支持各种语言。因为profobuf是二进制数据格式,需要编码