在打出hello world后,我们对go有了个简单的了解,下面再继续学习其主要的内容。
主要内容
变量类型:
在Go语言中,变量类型的定义类似于C和Java。你可以通过给变量赋值来指定其类型,也可以使用简短的声明方式,由编译器自动推断变量类型。
goCopy codepackage main
import "fmt"
func main() {
age := 25
height := 175.5
isStudent := true
name := "Alice"
fmt.Println(name, "今年", age, "岁,身高", height, "cm,是学生吗?", isStudent)
}
你可以尝试修改age的初始值,来验证其他分支的执行情况。
if else:
条件语句在Go中与C和Java类似。你可以增加更多的else if,但这样的方式可能降低代码的可读性。多个条件分支可以使用后面提到的switch语句代替,从而使代码更简洁。
goCopy codepackage main
import "fmt"
func main() {
num := 7
if num > 10 {
fmt.Println("数字大于10")
} else if num > 5 && num <= 10 {
fmt.Println("5 < 数字 <= 10")
} else {
fmt.Println("数字小于等于5")
}
}
循环:
循环在Go中与C和Java类似。不同的是,Go只有for关键字,可以用它来实现while和do...while循环。
goCopy codepackage main
import "fmt"
func main() {
i := 0
for i < 5 {
fmt.Println(i)
i++
}
}
switch:
Go语言的switch语句与C和Java有一些不同,它在某些方面更灵活。你可以通过分号在switch关键字和条件之间添加简单的初始化语句。
goCopy codepackage main
import "fmt"
func main() {
switch i := 6; {
case i > 10:
fmt.Println("i > 10")
case i > 5 && i <= 10:
fmt.Println("5 < i <= 10")
default:
fmt.Println("i <= 5")
}
}
在switch关键字之后,通过分号;分隔被初始化的i:=6。这个初始化语句可以在条件判断之前进行一些操作。请注意,这里的输出结果与之前的代码示例相同。
数组:
Go语言的数组与C和Java的数组类似,但长度在定义时就必须确定。与C和Java相比,Go的数组更加直接,没有过多的语法和特殊操作。
goCopy codepackage main
import "fmt"
func main() {
numbers := [5]int{1, 2, 3, 4, 5}
fmt.Println(numbers)
}
切片:
切片是Go语言中引人注目的特性。与C和Java的数组相比,切片更灵活,更易使用。它可以动态扩展,而不需要关心内存的分配和释放。
goCopy codepackage main
import "fmt"
func main() {
numbers := []int{1, 2, 3, 4, 5}
slice := numbers[1:4]
fmt.Println(slice)
}
map:
Go语言的map类似于C++的std::map和Java的HashMap,但在使用上更加简洁。需要注意的是,Go的map需要使用make函数进行初始化。
goCopy codepackage main
import "fmt"
func main() {
person := make(map[string]int)
person["Alice"] = 25
person["Bob"] = 30
fmt.Println(person["Alice"])
}
range:
在Go语言中,range用于遍历各种数据结构。与C和Java相比,Go的range更加便捷,可以一次性获取索引和值。
goCopy codepackage main
import "fmt"
func main() {
numbers := []int{1, 2, 3, 4, 5}
for index, value := range numbers {
fmt.Printf("索引:%d,值:%d\n", index, value)
}
}
函数:
Go语言的函数与C和Java的函数类似,但没有C中的指针参数。函数可以返回多个值,这在C和Java中是不常见的特性。
goCopy codepackage main
import "fmt"
func add(a, b int) int {
return a + b
}
func main() {
sum := add(3, 5)
fmt.Println(sum)
}
指针:
在Go语言中,指针与C和Java中的引用类似,但使用方式更加安全。Go语言对指针的操作进行了严格的控制,减少了悬空指针等错误。
goCopy codepackage main
import "fmt"
func main() {
num := 42
ptr := &num
fmt.Println(*ptr)
}
结构体和结构体方法:
Go语言的结构体与C的结构体和Java的类相似,但不支持继承。Go通过组合实现代码复用,而非继承,这有助于代码的模块化和清晰。
goCopy codepackage main
import "fmt"
type Person struct {
Name string
Age int
}
func (p Person) SayHello() {
fmt.Printf("大家好,我叫%s,今年%d岁。\n", p.Name, p.Age)
}
func main() {
person := Person{Name: "Bob", Age: 30}
person.SayHello()
}
总结
在本次学习中,我们了解了Go语言的一些基础模块,涵盖了变量类型、条件语句、循环结构、数组、切片、映射、范围遍历、函数、指针和结构体等关键概念,把常用的都过了一下,再简单总结一下:
- 变量类型:Go语言中的变量类型需要明确指定,但也支持类型推断。这有助于编译器理解数据,并提高代码可读性。
- 条件语句 (if else) :通过条件语句,我们可以根据不同的条件执行不同的代码块。注意,在Go语言中,条件语句可以包含初始化语句,并且不需要使用括号。
- 循环结构:Go语言的
for循环可以用于多种形式的迭代。与C和Java类似,它使我们能够重复执行相同的代码块。 - 数组:数组是一种固定长度的数据结构,用于存储相同类型的元素。与C和Java相比,Go的数组更加直接,不过长度在定义时需要确定。
- 切片:切片是Go语言的重要特性,可以看作是动态长度的数组。切片比数组更加灵活,可以根据需要自动扩展。
- 映射 (map) :映射是键值对的集合,类似于C++的
std::map和Java的HashMap。Go的映射允许我们将键与值关联起来,便于查找和访问。 - 范围遍历 (range) :
range关键字用于遍历各种数据结构,使代码更加简洁。它在循环中提供了索引和值。 - 函数:函数是Go语言的基本构建块,用于封装一组操作。函数可以接受多个参数,并返回多个值,这在C和Java中并不常见。
- 指针:指针是一种特殊的变量,存储另一个变量的内存地址。Go的指针操作更加安全,减少了悬空指针问题。
- 结构体和结构体方法:结构体是自定义的数据类型,用于组合不同类型的数据。Go通过结构体方法实现与结构体相关的操作,弥补了没有类继承的缺陷。
通过本次学习,我们已经对Go语言的基础模块有了初步的了解。这些模块为我们构建更复杂的程序和应用奠定了坚实的基础。接下来,您可以通过实践和进一步的学习,逐渐深入掌握这些概念,并将它们应用于实际开发中。
之后再学习像是字符串和JSON以及错误处理方面的内容吧。