Go语言基础(一)

写在前面

狂神开了一个Go的班,作为之前学过狂神Java,且有意向学Go的人,在有钱后第一时间去报了班。最近这段时间,Go语言的热度比起Java要高得多。一是为了给自己未来多一条路子,一是出于自己的兴趣爱好,正式开始学习Go。

定义变量

那么作为已经学习过众多语言的人,一些很基础的诸如配置环境,下载IDE等操作就不再记录了。直接开始学习Go的语法。

首先是变量的定义。Go是强类型语言,采用了与kotlin类似的变量后置,使用var来定义变量,并在变量名后声明类型,如下:

var name string
var age int

当然,我们可以在定义变量的时候直接赋值:

var name string = "wushenjiang"

不同于Java语言,我们可以一次性同时定义多个变量:

var (
	addr  string
	phone int
)

语法糖——:=

那么有人可能会有疑惑,这个var关键字有点多余呀。自然,Go语言提供了语法糖来定义变量:

name := "wushenjiang"

语法糖——交换变量

Go语言会提供很多的语法糖来简化我们的操作,比如一个最经典的交换变量a与b,我们在java语言或者C语言等可能要这样写:

int a,b,temp;
temp = a;
a = b;
b = temp;

很明显,这是非常不符合直觉的。在我初学编程时,为了理解交换变量都用了很长时间。Go语言对此提供了语法糖:

// 变量交换 语法糖
var a int = 100
var b int = 200
fmt.Println("a=", a, "b=", b)

b, a = a, b
fmt.Println("交换后a=", a, "b=", b)

类似的操作在Python语言里也可以这么写。采用这种写法,很明显更符合直觉。

匿名变量

这里提前引入了一个概念,即go的函数是可以返回多个值的,如:

func test() (int, int) {
	return 100, 200
}

那么比如说我们可能不需要其中某一个返回值要咋办呢?我们可以把他扔掉,直接不使用:

// 只想要test返回的第一个结果 使用匿名变量
a, _ = test()

同理,我们只想要第二个也可以这样写:

_,b = test()

定义常量

有了变量,自然也有常量。定义常量可以是显式定义,即自己指定类型:

// 常量 显式定义
const URL string = "wushenjiang.com"

也可以不指定类型,让编译器自动推断:

// 常量 隐式定义
const URL1 = "wushenjiang"

自然,也存在一些特殊的常量,如iota,这个常量是用来进行计数的,如下:

// 在一组const中 会自动+1
const (
	a = iota
	b = iota
	c = iota
	// 如果在定义const的时候 下面的常量没有赋值 默认沿用上面一个常量定义的赋值
	d = 0
	e = iota
)
fmt.Println(a, b, c, d, e)

我们打印结果,可以看到:

image-20230305174849388

咱们的d变量是0,但e还是变成了4,因为他是计数器,每多定义一个常量就会自动+1。这让我想起了数据库中的自增主键。大概后面可能会用到吧。

常见的基本数据类型

编程语言会有很多数据类型,这大家都知道。这里就大概过一下。

bool

布尔类型,只有true与false,如下:

// 定义变量 bool 布尔类型的定义
var b1 bool
var b2 bool

b1 = true
b2 = false

int

对于int类型,go语言提供了int8,int16,int32,int64以及无符号类型的uint系列:

image-20230305175340815

image-20230305175347658

int就不需要介绍了,非常常见。这里要注意的点是,我们默认使用int来定义时,按照源码里的介绍,最少为int32。取决于具体的操作系统:

image-20230305175605265

float

对于float类型,需要指定是float64还是float32:

var f1 float64
f1 = 3.14
var f2 float32
f2 = 5

一般使用float64即可

byte

byte,即字节。在go中他其实就是uint8类型:

image-20230305175849458

string

字符串类型,更常见了。直接使用:

var str string
str = "Hello,World"

if与switch

if

对于if的使用,要注意的是Go语言强行规定了格式,不过我们在使用goland工具书写时会自动帮我们使用要求的格式:

var num int = 15

if num > 10 {
	fmt.Println("num > 10")
}

var score int = 90
if score > 60 {
	fmt.Println("has succeed")
} else if score > 70 {
	fmt.Println("excellent")
}

switch

go语言的switch,新增了一个fallthrough的关键字,会强制执行下面的case语句,如下代码:

// 穿过
a := false
switch a {
case false:
	fmt.Println("1") // 默认只会输出1
	fallthrough      // 一旦使用了fallthrough 则会强制执行下面的case语句
case true:
	fmt.Println("2")
	fallthrough
case false:
	fmt.Println("3")
	fallthrough
case true:
	fmt.Println("4")
	fallthrough
default:
	fmt.Println("0")
}

运行发现:

image-20230305180622918

其实就是直接无视了case一路穿透了下来。

for循环

for循环也十分简单:

// for
for i := 0; i <= 10; i++ {
	fmt.Println(i)
}

// 1加到10
sum := 0
for i := 1; i <= 10; i++ {
	sum += i
}
fmt.Println(sum)

	// 简便写法 for里只写结束条件 == while
i := 0
for i <= 5 {
	i++
}

go语言没有while循环,也没有do...while循环。因为都可以被for循环所替代。

总结

今天主要是学习了一些基本语法。考虑到自己的基础,省略了很多细枝末节。主要是用来给自己学习的知识进行系统的回顾。

posted @ 2023-03-05 18:21  武神酱丶  阅读(61)  评论(0编辑  收藏  举报