首页 > 其他分享 >go语言学习笔记【一】

go语言学习笔记【一】

时间:2023-01-22 10:03:59浏览次数:42  
标签:case 语言 fmt 笔记 var Println num go main


一、初入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:
// 所有通道都没有准备好,执行的代码

}


标签:case,语言,fmt,笔记,var,Println,num,go,main
From: https://blog.51cto.com/xbfinal/6021422

相关文章

  • sql base nodejs py go操作基本的db
    constmysql=require('mysql2');constconnection=mysql.createConnection({host:'localhost',user:'root',password:'root',database:'mybatis_pl......
  • Datawhale组队学习——人工智能:一种现代方法(第四版)Task02学习笔记
    第二章智能体智能体智能体是在环境中感知和行动的事物。智能体=架构+程序一个智能体在任何给定的时刻的动作选择可能取决于内置知识和迄今为止观察到的整个感......
  • 学习笔记——拦截器与过滤器的区别;拦截器概述;拦截器中三个方法
    2023-01-21一、拦截器与过滤器的区别1、过滤器(Filter)属于web服务器组件(1)过滤器主要作用:过滤Servlet请求(2)执行时机:两处执行时机(Servlet前、Servlet后)2、拦截器(Intercep......
  • Django书籍学习记录
    没有记录回顾的学习都是白学,那天偶尔搜到这本书,其中除了一部分官网的中文翻译,还有一些没有了解到的地方,比如模型查询filter的链式调用,Q.F方法在定义化SQL中起到的作......
  • 【QOJ 4273】Good Game(分类讨论)(构造)
    GoodGame题目链接:QOJ4273题目大意给你一个01串,每次可以删一个长度为2/3的全0子串或者全1子串。要你构造一种方法把串删空,或者输出无解。思路首先发现这个......
  • leetcode笔记——328周赛
    1.二维前缀和,二维差分304.二维区域和检索-矩阵不可变-力扣(LeetCode)二维前缀和怎么处理,注意加减的下标 2.2537.统计好子数组的数目-力扣(LeetCode)首先看到子数......
  • 《RPC实战与核心原理》学习笔记Day4
    05|动态代理:面向接口编程,屏蔽RPC处理流程RPC和动态代理有什么关系?当我们使用RPC时,我们一般会先找到服务提供方要接口,然后将接口依赖配置到项目中,我们在编写业务逻辑时......
  • [ 6--JWT学习 | 青训营笔记]
    这是我参与「第五届青训营」伴学笔记创作活动的第6天JWT介绍JSONWebToken(orJWT)只是一个包含某种意义数据的JSON串。它最重要的特性就是,为了确认它是否有效,我们......
  • 一文解决如何使用 C 语言判断质数(素数)[ 附解析与源码 ]
    前言质数历来都是数学界的宠儿,是数学里神秘的谜团。质数又和C语言有着不解之缘,本篇文章将讲解如何用C语言判断质数。为了方便大家在读完此文章后使用文中程序,我会将......
  • 鹅鸭杀goose goose duck注册教程2023
    《鹅鸭杀》是GaggleStudios开发的策略休闲游戏,于2021年10月4日在Steam平台上发布。 这是一款带有社交性质的游戏,具体玩法类似升级版的狼人杀。要注册Gaggle.fun账号,请......