前言:Go 语言(又称 Golang)以其简洁、高效的特性,在编程领域崭露头角。它由 Google 公司的 Robert Griesemer、Rob Pike 和 Ken Thompson 于 2007 年创建,旨在提高编程效率,简化并发编程,同时保持良好的性能。
目录
一、引言
二、第一个 Go 程序
三、变量与数据类型
变量声明
基本数据类型
四、控制流语句
条件语句
循环语句
五、函数
函数定义
函数调用
匿名函数
六、数组与切片
数组
切片
七、映射(Map)
八、结构体
九、包与模块
包
模块
十、文件操作
总结
Go 语言,简单高效,在编程界很受欢迎。它上手容易,干起活来还特别利索。今天咱就来唠唠 Go 语言的基础语法,⊣> 带你快速上手!
先来个简单的 Go 程序,感受一下。创建一个名为 main.go
的文件,写入以下代码:
package main
import "fmt"
func main() {
fmt.Println("Hello, Go 世界!")
}
这段代码就像打招呼一样简单。package main
表示这是主包,程序从这儿开始跑。import "fmt"
把 fmt
包拽进来,能帮咱在屏幕上打印东西。func main()
是程序的起点,相当于说 “从这儿开始执行”。fmt.Println
把括号里的内容打印出来,让它在屏幕上显示。
在终端里跑 go run main.go
,就能看到程序热情地问候你了。就像迈出了成为程序员的第一步,是不是很酷?
变量就是给数据起个名字,方便后面用。Go 里声明变量有两种方式:
var name string = "张三"
var age int = 18
这就像是给两个小盒子分别贴上 “名字” 和 “年龄” 的标签,再把对应的内容放进去。或者用更简洁的方式:
name := "张三"
age := 18
这就像是对程序说 “嘿,这有个叫 name 的东西,它是字符串,值是张三”,省去了写变量类型的麻烦。
Go 语言的数据类型可丰富了:
布尔型(bool) :值只能是 true
或 false
,就像一个只能回答 “是” 或 “否” 的小朋友。
整型(int、int8、int16、int32、int64、uint 等) :用来装整数的,不同类型的整型能装的数范围不一样。
浮点型(float32、float64) :专门装小数的,float32
精度差点,float64
精度高些。
字符串(string) :就是一串字符,用双引号把它串起来。比如 "Hello, Go"
就是一个字符串,一旦定了就改不了啦。
程序可聪明了,能根据条件做不同反应。就像你看到红灯停,绿灯行一样。
if-else
语句:
age := 18
if age >= 18 {
fmt.Println("已成年,可以去嗨啦!")
} else {
fmt.Println("未成年,乖乖在家写作业哦!")
}
这就像是对程序说 “如果年龄大于等于 18,就打印可以嗨的信息,不然就打印写作业的信息”。
switch
语句:
day := "Monday"
switch day {
case "Monday":
fmt.Println("今天是周一,打起精神开工!")
case "Tuesday":
fmt.Println("今天是周二,继续努力!")
case "Wednesday":
fmt.Println("今天是周三,快到周末啦!")
default:
fmt.Println("其他日期,盼望着周五吧!")
}
这就像是给程序列了个清单,它会根据 day
的值来挑对应的内容打印。
循环就像让程序重复做某件事,直到满足条件才停下来。
传统的 for
循环:
for i := 0; i < 5; i++ {
fmt.Println(i)
}
这就像是对程序说 “从 0 开始数,数到 4 就停,每次数一个数就打印出来”。
无限循环:
for {
fmt.Println("我陷入无限循环啦,救命啊!")
// 通常得加个条件让它能跳出去,不然就一直唠叨
// break
}
这就像是让程序一直唠叨一句话,不给它个 “break” 就停不下来。
遍历循环(for-range
):
names := [3]string{"张三", "李四", "王五"}
for index, name := range names {
fmt.Printf("索引:%d,姓名:%s\n", index, name)
}
这就像是给程序一个名字列表,让它挨个把名字和位置打印出来。
函数就是把一段代码封装起来,方便重复用。就像把常用的操作做成一个工具。
func add(a int, b int) int {
return a + b
}
这就像是教程序一个叫 “add” 的技能,给它两个整数,它就把它们加起来返回。
有了函数,就可以随时随地调用它。就像你随时可以用手机拍照一样。
result := add(3, 5)
fmt.Println(result) // 输出 8
这就像是让程序用 “add” 技能算一下 3 和 5 的和,然后把结果打印出来。
匿名函数就像一个没有名字的技能,可以临时用。
func() {
fmt.Println("我是个匿名函数,没有名字但很有用哦!")
}()
这就像是让程序临时做一件事,但不给它起名字。
func execute(f func()) {
f()
}
execute(func() {
fmt.Println("我被当作参数传进来了!")
})
这就像是把一个技能当作礼物送给 execute
函数,让它帮忙执行。
数组就是把一堆相同类型的数据搁在一起,长度固定。就像一排小格子,每个格子装同类型的东西。
var arr [5]int
// 或者
arr := [5]int{1, 2, 3, 4, 5}
访问数组元素就像找格子位置一样,从 0 开始数。
fmt.Println(arr[0]) // 输出 1
切片就像数组的 “小跟班”,长度可变,更灵活。创建切片的方式有:
使用 make
函数:
slice := make([]int, 3)
这就像是让程序准备一个能装 3 个整数的切片。
通过字面量创建:
slice := []int{1, 2, 3}
这就像是直接把 1、2、3 放进切片里。
切片还能动态扩展,就像气球能吹大一样。
slice := []int{1, 2, 3}
slice = append(slice, 4)
fmt.Println(slice) // 输出 [1 2 3 4]
这就像是把 4 加到切片末尾,让它变长。
映射就是一组键值对,像一本电话簿,通过名字找电话号码。
student := make(map[string]int)
student["张三"] = 18
student["李四"] = 19
这就像是在电话簿里给 “张三” 和 “李四” 分别登记了年龄。
访问映射元素就像查电话簿。
age := student["张三"]
fmt.Println(age) // 输出 18
还能遍历映射,就像一页页翻看电话簿。
for key, value := range student {
fmt.Printf("姓名:%s,年龄:%d\n", key, value)
}
这就像是把电话簿里的名字和年龄都打印出来。
结构体就像一个自定义的小盒子,能把不同类型的数据装在一起。
type Person struct {
Name string
Age int
Addr string
}
这就像是设计了一个 “Person” 盒子,能装名字、年龄和地址。
创建结构体实例并访问字段就像把具体数据放进盒子,再从盒子里取出来。
person := Person{
Name: "张三",
Age: 18,
Addr: "北京",
}
fmt.Println(person.Name) // 输出 张三
还能给结构体定义方法,就像教盒子一个新技能。
func (p Person) SayHello() {
fmt.Printf("你好,我是%s,住在%s,今年%d岁啦!\n", p.Name, p.Addr, p.Age)
}
person.SayHello() // 调用方法
这就像是让盒子自己介绍一下自己。
Go 程序由包组成,包就像一个个文件夹,把相关的代码放在一起。
package main
这就像是给一个包起名叫 “main”。
要使用其他包里的代码,得先导入。
import "fmt"
这就像是把 “fmt” 包里的东西搬到自己这儿来用。
模块就像一个大包裹,把多个包打包在一起。
在项目根目录下运行命令 go mod init module_name
,这就像是给包裹起个名字。
Go 工具会自动生成一个 go.mod
文件,用来记录包裹里都有啥玩意儿。
依赖其他外部包的时候,Go 会自动把它们下载过来,就像快递送货上门一样,方便得很。
Go 语言的文件操作功能很强大,能帮咱轻松搞定文件相关的事儿。
创建文件 :
file, err := os.Create("test.txt")
if err != nil {
fmt.Println("哎呀,创建文件失败啦:", err)
return
}
defer file.Close() // 这个 defer 就像个小跟班,等函数快结束时把文件关上
这就像是让程序新建一个叫 “test.txt” 的文件。
写入文件 :
content := "Hello, Go 世界!"
_, err = file.WriteString(content)
if err != nil {
fmt.Println("哎呀,写入文件失败啦:", err)
return
}
这就像是往文件里写 “Hello, Go 世界!”,把想说的话都存进去。
读取文件 :
data, err := os.ReadFile("test.txt")
if err != nil {
fmt.Println("哎呀,读取文件失败啦:", err)
return
}
fmt.Println(string(data)) // 把文件内容都打印出来,看看写了啥
这就像是把文件里的内容都读出来,展示在屏幕上。
恭喜你掌握了 Go 语言的基础语法!从"Hello World"到变量声明,从流程控制到函数编写,再到数组、映射、结构体的使用,以及包管理和文件操作,你已经搭建起了坚实的编程基础。现在可以尝试一些有趣的小项目,比如开发简易计算器或文件读写工具。后续还可以探索更高级的主题,如并发编程、接口设计和反射机制。记住,编程的精髓在于实践,多写代码,多思考,你一定能成为优秀的 Go 开发者!继续加油吧!