筑基期
1. Go 语言的应用场景和优势有哪些?
Go
语言是一种开源编程语言,因其简洁、高效而广受欢迎。
常见应用场景包括微服务、网络编程、云服务和分布式系统。
其优势在于并发模型(goroutine
和 channel
)、内存管理(自动垃圾回收)、强类型系统以及跨平台编译能力。
// 示例:启动多个 goroutine
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done()
fmt.Printf("Worker %d starting\n", id)
// 模拟工作
}
func main() {
var wg sync.WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1)
go worker(i, &wg)
}
wg.Wait()
fmt.Println("All workers completed.")
}
2. Go 的数据类型有哪些?如何声明变量?
Go
支持多种基本数据类型,包括整型、浮点型、布尔型和字符串。
变量可以使用 var
声明,也可以使用简短声明符 :=
。
// 示例:声明变量
package main
import "fmt"
func main() {
var a int = 10
b := 20.5 // 简短声明
c := "Hello, Go!"
d := true
fmt.Println(a, b, c, d)
}
3. 如何定义和使用函数?支持哪些参数和返回值类型?
Go
允许定义具有多个参数和返回值的函数。参数可以是任意类型,返回值也可以是多个。
// 示例:函数定义
package main
import "fmt"
func add(x int, y int) (int, error) {
return x + y, nil
}
func main() {
sum, _ := add(5, 3)
fmt.Println("Sum:", sum)
}
4. 什么是数组和切片?它们之间有什么区别?
数组是固定大小的集合,切片是动态大小的集合。切片比数组更灵活,因为它可以根据需要动态调整大小。
// 示例:数组与切片
package main
import "fmt"
func main() {
// 数组
var arr [3]int = [3]int{1, 2, 3}
fmt.Println("Array:", arr)
// 切片
slice := []int{1, 2, 3, 4}
slice = append(slice, 5) // 动态添加元素
fmt.Println("Slice:", slice)
}
5. Go 中的 map 是什么?如何创建和使用 map?
map
是一种无序的键值对集合,键必须是唯一的。可以使用内置的 make
函数创建 map
。
// 示例:使用 map
package main
import "fmt"
func main() {
// 创建 map
myMap := make(map[string]int)
myMap["apple"] = 5
myMap["banana"] = 3
// 访问 map
fmt.Println("Apple count:", myMap["apple"])
// 删除元素
delete(myMap, "banana")
fmt.Println("After deletion:", myMap)
}
6. 如何使用控制结构(if、for、switch)进行流程控制?
Go
提供了 if
、for
和 switch
控制结构,用于控制代码的执行流程。
// 示例:控制结构
package main
import "fmt"
func main() {
// if 语句
num := 10
if num > 0 {
fmt.Println("Positive number")
}
// for 循环
for i := 0; i < 5; i++ {
fmt.Println(i)
}
// switch 语句
day := 3
switch day {
case 1:
fmt.Println("Monday")
case 2:
fmt.Println("Tuesday")
case 3:
fmt.Println("Wednesday")
default:
fmt.Println("Another day")
}
}
7. 什么是结构体(struct)?如何定义和使用结构体?
结构体是用户自定义的复合数据类型,允许将多个字段组合在一起。
// 示例:结构体定义
package main
import "fmt"
type Person struct {
Name string
Age int
}
func main() {
// 创建结构体实例
p := Person{Name: "Alice", Age: 30}
fmt.Println("Name:", p.Name, "Age:", p.Age)
}