0
点赞
收藏
分享

微信扫一扫

go语言学习笔记【一】


一、初入GO语言

我们先还是看看GO语言的hello world是怎么写的吧

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

第一行 :包声明,编写源文件时,必须在非注释的第一行指明这个文件属于哪个包,如​​package main​

第二行:引入包,其实就是告诉Go 编译器这个程序需要使用的包,如​​import "fmt"​​其实就是引入了fmt包

第三行 :主函数 整个程序的入口 整个项目​​有且只有一个​​main函数

  • 在 Go 语言里,命名为 main 的包具有特殊的含义。 Go 语言的编译程序会试图把这种名字的包编译为二进制可执行文件。所有用 Go 语言编译的可执行程序都必须有一个名叫 main 的包。一个可执行程序有且仅有一个 main 包。当编译器发现某个包的名字为 main 时,它一定也会发现名为 main()的函数,否则不会创建可执行文件。 main()函数是程序的入口,所以,如果没有这个函数,程序就没有办法开始执行。程序编译时,会使用声明 main 包的代码所在的目录的目录名作为二进制可执行文件的文件名
  • 我们话可以看到每行最后没有 ​​;​​号 这也是和java不同的地方我们要注意

二、变量

首先我们看看go的数据类型有哪些

Go语言将数据类型分为四类:基础类型、复合类型、引用类型和接口类型。

  • 基础类型,包括:数字、字符串和布尔型。
  • 复合数据类型——数组 和 结构体——是通过组合简单类型,来表达更加复杂的数据结构。
  • 引用类型包括指针、切片、字典、函数、通道

变量的申请

  • 方式一​var 变量名 数据类型​

var a int
a = 1
var a1, a2, a3 int = 1, 2, 3
fmt.Println(a, a1, a2, a3)

可以看到var a int 使用 var 关键字来申请变量 a是变量名 int是数据类型

  • 方式二​var 申请变量时 赋值​

var b, b2 = 2, 2
fmt.Println(b, b2)

我们可以看到这样 省略了 数据类型 b b2可以根据后面的值来自动推断数据类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jini0sR5-1674191979398)(C:\Users\35886\AppData\Roaming\Typora\typora-user-images\image-20230115120652636.png)]

  • 方式三 var省略

c := 3
c1, c2, c3 := 3, 3, 3
fmt.Println(c, c1, c2, c3)

这样的写法最简单 但是只能 申请局部变量

  • 其他方式

var (
d int
e string
f bool
)

fmt.Println("d=", d, "e=", e, "f=", f)

三、for循环

在go中只有for循环 没得java中其他的while do-while

for j := 1; j < 11; j++ {
fmt.Println(j)
}

可以看到和java相比 for后面没有() 其他差不多​​j := 7; j < 9; j++​​中 也可以省略也就是可以有以下的几种写法

for{
fmt.Println("死循环")
}

k := 1
for ; k < 10; k++ {
fmt.Println(k)
}
for i := 1; ; i++ {
fmt.Println("死循环")
}
for i := 1; i < 10; {
fmt.Println(i)
i++
}

总之和java差别不是很大

四、条件语句

go语言条件语句有如下几种

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c1CCuBLg-1674191979399)(C:\Users\35886\AppData\Roaming\Typora\typora-user-images\image-20230115131637748.png)]

4.1 、if语句

Go 没有三目运算符,所以不支持 ?: 形式的条件判断。

if 7%2 == 0 {
fmt.Println("7 is even")
} else {
fmt.Println("7 is odd")
}

if 8%4 == 0 {
fmt.Println("8 is divisible by 4")
}

当然和for循环一样与java相比也没有(),上面的代码只要有点其他语言的基础也能读懂

注意 else后面的 { 不能换行

if num := 9; num < 0 {
fmt.Println(num, "is negative")
} else if num < 10 {
fmt.Println(num, "has 1 digit")
} else {
fmt.Println(num, "has multiple digits")
}

if num := 9; num < 0 我们还能在if里面 申请变量 ;后面 num < 0 才是真正的判断语句

当然if 也能嵌套如下代码

if num := 9; num < 0 {
if num > -2 {
fmt.Println("11111111111111")
}
} else if num < 10 {
if num > 0 {
fmt.Println("22222222222222")
} else {
fmt.Println("33333333333333")
}
} else {
fmt.Println("44444444444444")
}

4.2、switch 语句

语法如下

switch var1 {
case val1:
// 执行的代码
case val2:
// 执行的代码
case val3:
// 执行的代码
default:
// 执行的代码
}

注意和Java相比 case后面不用加break 当满足case val2的时候并不会在执行下面的 case val3。不同的 case 之间不使用 break 分隔,默认只会执行一个 case

switch 的 default 不论放在哪都是最后执行

值得注意的事 val可以是表达式 也就是说可以替代if语句

a := 1
switch {
case a%2 == 0:
fmt.Println(a % 2)
case a%2 != 0:
fmt.Println(a % 2)
}

​运行结果是 1​

4.3 、select 语句

select 是 Go 中的一个控制结构,类似于 switch 语句。select 语句只能用于通道操作,每个 case 必须是一个通道操作,要么是发送要么是接收。

如果多个通道都准备好,那么 select 语句会随机选择一个通道执行。如果所有通道都没有准备好,那么执行 default 块中的代码。

语法

select {
case 通道操作1:
// 执行的代码
case 通道操作2:
// 执行的代码
case 通道操作3:
// 执行的代码
default:
// 所有通道都没有准备好,执行的代码

}


举报

相关推荐

0 条评论