变量和数据类型

变量

Go 中,变量是我们用来存储数据的容器。
你可以把它想象成抽屉,里面可以放置各种信息。
声明变量的基本语法是使用 var 关键字,后面跟着变量名和类型。
例如:

var name string
var age int

这里,nameage 是变量名,stringint 分别是它们的类型,意味着 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)
}

输出:

image.png

数据类型

现在,让我们谈谈数据类型
Go 中,数据类型告诉编译器变量可以存储什么类型的数据。
Go 的基本数据类型包括:

  • 整数类型:如 int, uint, int64, uint64 等。
  • 浮点类型:如 float32, float64
  • 布尔类型bool,它可以是 truefalse
  • 字符串类型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("欢迎来到编程世界!")
}

输出:

image.png

则是一种封装和组织你的代码的方法,使它易于维护和重用。
例如,fmt 包包含了格式化输入输出的函数。
当你需要使用包中的函数时,你需要先导入该包:

import "fmt"

之后,你就可以使用 fmt.Println 来打印消息到控制台了。

Go 中创建自己的包也很简单。你只需要创建一个新的文件夹,并在其中添加一个名为 package yourpackagenameGo 文件即可。
然后,你可以在其他 Go 程序中导入并使用你的包。

在下一课中,我们会深入了解控制结构,它们允许我们根据不同的条件执行不同的代码路径。
这对于编写动态和响应用户输入的程序至关重要。


文章作者: Runfa Li
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Linux 小白鼠
GO GO 入门 go
觉得文章不错,打赏一点吧,1分也是爱~
打赏
微信 微信
支付宝 支付宝