Go语言增量式学习3, 又名:Go企业级应用到底层开发(第2天)
PS:这个系列是准备做从go在Web开发,系统编程,云原生应用, 网络编程, 工具和脚本开发, 机器学习,Cgo编程, 还有最后的编译器层级底层的分析, 无盈利模式,所以一键三连是我最大的动力。谢谢~~
package main
import "fmt"
// 全局变量,作用域为整个程序
var globalVar int = 10
func main() {
// 局部变量,作用域为main函数内部
localVar := 5
fmt.Println("局部变量 localVar:", localVar)
// 函数参数,参数x的作用域为整个函数体
multiplyByTwo(localVar)
}
func multiplyByTwo(x int) {
// 可以直接访问函数参数x和全局变量globalVar
result := x * 2
fmt.Println("函数内部 result:", result)
fmt.Println("全局变量 globalVar:", globalVar)
}
package main
import "fmt"
func main() {
// 声明一个包含5个整数的数组
var numbers [5]int
// 初始化数组元素
numbers[0] = 1
numbers[1] = 2
numbers[2] = 3
numbers[3] = 4
numbers[4] = 5
// 访问数组元素
fmt.Println("数组元素:", numbers[2])
}
package main
import "fmt"
func main() {
// 声明一个整数变量
var x int = 42
// 声明一个指向整数的指针
var ptr *int
// 将x的地址分配给指针ptr
ptr = &x
// 通过指针访问变量值
fmt.Println("x的值:", *ptr)
// 通过指针修改变量值
*ptr = 100
fmt.Println("修改后的x的值:", x)
}
package main
import "fmt"
// 声明一个名为Person的结构体类型
type Person struct {
FirstName string
LastName string
Age int
}
func main() {
// 创建一个Person类型的结构体变量
person := Person{
FirstName: "John",
LastName: "Doe",
Age: 30,
}
// 访问结构体字段
fmt.Println("姓名:", person.FirstName, person.LastName)
fmt.Println("年龄:", person.Age)
}
package main
import "fmt"
func main() {
// 声明一个整数切片
var numbers []int
// 添加元素到切片
numbers = append(numbers, 1)
numbers = append(numbers, 2, 3, 4)
// 访问切片元素
fmt.Println("切片元素:", numbers)
// 截取子切片
subset := numbers[1:3] // 包括索引1,但不包括索引3
fmt.Println("子切片:", subset)
}
package main
import "fmt"
func main() {
// 使用范围遍历切片
numbers := []int{1, 2, 3, 4, 5}
for index, value := range numbers {
fmt.Printf("索引 %d 的值是 %d\\n", index, value)
}
// 使用范围遍历映射
person := map[string]string{
"Name": "John",
"Country": "USA",
}
for key, value := range person {
fmt.Printf("%s: %s\\n", key, value)
}
}
package main
import "fmt"
func main() {
// 创建一个映射
scores := make(map[string]int)
// 添加键值对到映射
scores["Alice"] = 90
scores["Bob"] = 85
// 获取映射的值
aliceScore := scores["Alice"]
fmt.Println("Alice的分数:", aliceScore)
// 删除映射中的键值对
delete(scores, "Bob")
fmt.Println("Bob的分数:", scores["Bob"]) // 不存在,返回零值
}
package main
import "fmt"
// 递归函数计算阶乘
func factorial(n int) int {
if n == 0 {
return 1
}
return n * factorial(n-1)
}
func main() {
result := factorial(5)
fmt.Println("5的阶乘:", result)
}
Go语言没有传统的类和继承的概念,而是通过结构体(struct)和接口(interface)来实现面向对象编程的特性。
在Go语言中,可以创建结构体来定义自定义类型,然后在结构体中定义字段(属性)和方法(函数)。这些方法可以与结构体关联,实现对结构体的操作。但请注意,Go中的方法并不是与特定的实例相关联的,而是与类型相关联的。
例如,以下是一个简单的结构体定义和方法定义:
package main
import "fmt"
// 定义一个结构体
type Person struct {
Name string
Age int
}
// 定义一个方法,与Person类型相关联
func (p Person) SayHello() {
fmt.Printf("Hello, my name is %s and I'm %d years old.\\n", p.Name, p.Age)
}
func main() {
// 创建一个Person对象
person := Person{Name: "Alice", Age: 30}
// 调用Person对象的方法
person.SayHello()
}
虽然Go语言中没有类的概念,但可以使用结构体和方法来实现面向对象编程的思想。另外,Go语言还提供了接口,允许对象通过实现接口来定义其行为,从而实现多态。这种方式使得Go语言能够实现面向对象编程的一些特性,同时保持了简洁性和效率。
package main
import "fmt"
// 定义一个接口
type Shape interface {
Area() float64
}
// 实现接口的结构体
type Circle struct {
Radius float64
}
// Circle类型实现接口方法
func (c Circle) Area() float64 {
return 3.14 * c.Radius * c.Radius
}
// 计算形状的面积
func CalculateArea(s Shape) {
fmt.Printf("形状的面积是 %.2f\\n", s.Area())
}
func main() {
// 创建一个Circle对象并计算面积
circle := Circle{Radius: 5.0}
CalculateArea(circle)
}