go语言学习笔记【一】

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

一、初入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:
    	 // 所有通道都没有准备好执行的代码
		
	}
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: go