01.Go语言基础
变量和数据类型
变量
在 Go
中,变量是我们用来存储数据的容器。
你可以把它想象成抽屉,里面可以放置各种信息。
声明变量的基本语法是使用 var
关键字,后面跟着变量名和类型。
例如:
var name string
var age int
这里,name
和 age
是变量名,string
和 int
分别是它们的类型,意味着 name
存储字符串,age
存储整数。
Go 也允许你在声明变量的同时赋值:
var name string = "Alice"
var age int = 30
或者更简洁的方式,省略类型(Go
会自动推断):
var name = "Alice"
var age = 30
甚至可以使用 :=
语法,这是声明并初始化变量的更短方式:
name := "Alice"
age := 30
例子:
package main
import "fmt"
func main() {
var myNumber int = 7
var isMagician bool = true
var phrase string = "编程就像魔法!"
// int 转 str
num := 100
fmt.Printf("%T %d \n", num, num)
strNum := strconv.Itoa(num)
fmt.Printf("%T %v \n", strNum, strNum)
// str 转 int
// intNum 接收转换后的数据,err 接收转换时可能的报错
intNum, err := strconv.Atoi(strNum)
if err != nil {
fmt.Println(err)
}
fmt.Printf("%T %v \n", intNum, intNum)
// 打印变量
fmt.Println("我的幸运数字是:", myNumber)
fmt.Println("我是一个魔法师吗?", isMagician)
fmt.Println("我的座右铭是:", phrase)
}
输出:
数据类型
现在,让我们谈谈数据类型。
在 Go
中,数据类型告诉编译器变量可以存储什么类型的数据。
Go
的基本数据类型包括:
- 整数类型:如
int
,uint
,int64
,uint64
等。 - 浮点类型:如
float32
,float64
。 - 布尔类型:
bool
,它可以是true
或false
。 - 字符串类型:
string
,它是字符的序列。
这些类型帮助编程语言理解如何处理变量中的数据,比如两个整数可以相加,字符串可以连接。
要记住的关键点是,变量让我们可以用名字来引用数据,而数据类型则确保我们的操作有意义和正确。
运算和表达式
在 Go
语言中,我们可以使用变量来进行各种运算,这就像数学里的加减乘除一样。🧮✨
基本算术运算包括:
- 加法 (
+
):将两个数相加。 - 减法 (
-
):从一个数中减去另一个数。 - 乘法 (
*
):将两个数相乘。 - 除法 (
/
):将一个数除以另一个数。 - 取余 (
%
):得到除法的余数。
在 Go
中,你可以这样使用它们:
a := 10
b := 3
sum := a + b // 13
difference := a - b // 7
product := a * b // 30
quotient := a / b // 3
remainder := a % b // 1
除了基本算术,我们还有比较运算符,这些运算符用于比较两个值:
- 等于 (
==
):判断两个值是否相等。 - 不等于 (
!=
):判断两个值是否不相等。 - 小于 (
<
):判断左边的值是否小于右边的值。 - 大于 (
>
):判断左边的值是否大于右边的值。 - 小于等于 (
<=
):判断左边的值是否小于或等于右边的值。 - 大于等于 (
>=
):判断左边的值是否大于或等于右边的值。
例如:
a := 10
b := 20
isSame := a == b // false
isDifferent := a != b // true
isLess := a < b // true
isGreater := a > b // false
isLessOrEqual := a <= b // true
isGreaterOrEqual := a >= b // false
还有逻辑运算符,它们常用于结合多个条件:
- 与 (
&&
):当两个条件都为true
时,结果为true
。 - 或 (
||
):当两个条件中至少有一个为true
时,结果为true
。 - 非 (
!
):反转条件的布尔值。
例如:
isAdult := true
hasPermission := false
canEnter := isAdult && hasPermission // false
canEither := isAdult || hasPermission // true
cannotEnter := !isAdult // false
了解了这些基础之后,你就可以开始编写更复杂的 Go 程序了。
函数和包
函数
在 Go 语言中,函数是执行特定任务的代码块。
你可以想象它们是配方,告诉计算机如何完成某件事情。
而包则是一种将相关的函数和其他代码片段组织在一起的方式,就像食谱书中的章节。📖🛠️
函数定义通常包括函数名、参数列表、返回类型和函数体。
这是一个简单的函数示例:
// 定义一个接收一个字符串参数的函数,并返回一个问候语
func getGreeting(name string) string {
return "你好, " + name + "!"
}
在上面的代码段中,我们定义了一个名为 getGreeting
的函数。
这个函数的定义包含了几个关键部分:
func
关键字开始了函数声明。getGreeting
是函数的名称。(name string)
是函数的参数列表。在这个例子中,getGreeting
接受一个名为name
的参数,类型为string
。string
在参数列表之后,表示函数的返回类型。这意味着getGreeting
函数会返回一个string
类型的值。
函数体(大括号 {}
内的部分)包含了一个 return
语句,它会返回一个拼接的字符串,格式为 "你好, " + name + "!"
。
当你调用这个函数并给它一个字符串时,它会返回一个问候语,包括你提供的名字。
你可以这样调用(使用)这个函数:
func main() {
greeting := getGreeting("世界")
fmt.Println(greeting)
}
main
函数是每个可执行Go
程序的入口点。当你运行程序时,main
函数是最先被调用的。- 在
main
函数内部,我们调用了getGreeting
函数,并传递了字符串"世界"
作为参数。 getGreeting("世界")
的调用结果被赋值给变量greeting
。这里"世界"
是传递给name
参数的实际字符串。fmt.Println(greeting)
调用了fmt
包的Println
函数,它打印greeting
变量的内容到控制台。在这个例子中,greeting
变量将会是"你好, 世界!"
。
例子:
package main
import "fmt"
func main() {
// 调用函数
printGreeting()
val := add(1, 1, "a") // val 接收的是函数的返回值(return 部分)
fmt.Println("函数的返回值为:", val)
}
// 函数参数和返回值
// x,y int:x,y 代表函数的参数,int 指定参数的类型
// (int) 代表函数执行完之后返回一个 int 类型的数据
// 可以跟着传入其他类型的参数,例如 c string
func add(x, y int, c string) int {
return x + y
}
// 定义一个函数,打印欢迎信息
func printGreeting() {
fmt.Println("欢迎来到编程世界!")
}
输出:
包
包则是一种封装和组织你的代码的方法,使它易于维护和重用。
例如,fmt
包包含了格式化输入输出的函数。
当你需要使用包中的函数时,你需要先导入该包:
import "fmt"
之后,你就可以使用 fmt.Println
来打印消息到控制台了。
在 Go
中创建自己的包也很简单。你只需要创建一个新的文件夹,并在其中添加一个名为 package yourpackagename
的 Go
文件即可。
然后,你可以在其他 Go
程序中导入并使用你的包。
在下一课中,我们会深入了解控制结构,它们允许我们根据不同的条件执行不同的代码路径。
这对于编写动态和响应用户输入的程序至关重要。