GO语言基础(上) | 青训营

77 阅读5分钟

在打出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关键字,可以用它来实现whiledo...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语言的一些基础模块,涵盖了变量类型、条件语句、循环结构、数组、切片、映射、范围遍历、函数、指针和结构体等关键概念,把常用的都过了一下,再简单总结一下:

  1. 变量类型:Go语言中的变量类型需要明确指定,但也支持类型推断。这有助于编译器理解数据,并提高代码可读性。
  2. 条件语句 (if else) :通过条件语句,我们可以根据不同的条件执行不同的代码块。注意,在Go语言中,条件语句可以包含初始化语句,并且不需要使用括号。
  3. 循环结构:Go语言的for循环可以用于多种形式的迭代。与C和Java类似,它使我们能够重复执行相同的代码块。
  4. 数组:数组是一种固定长度的数据结构,用于存储相同类型的元素。与C和Java相比,Go的数组更加直接,不过长度在定义时需要确定。
  5. 切片:切片是Go语言的重要特性,可以看作是动态长度的数组。切片比数组更加灵活,可以根据需要自动扩展。
  6. 映射 (map) :映射是键值对的集合,类似于C++的std::map和Java的HashMap。Go的映射允许我们将键与值关联起来,便于查找和访问。
  7. 范围遍历 (range)range关键字用于遍历各种数据结构,使代码更加简洁。它在循环中提供了索引和值。
  8. 函数:函数是Go语言的基本构建块,用于封装一组操作。函数可以接受多个参数,并返回多个值,这在C和Java中并不常见。
  9. 指针:指针是一种特殊的变量,存储另一个变量的内存地址。Go的指针操作更加安全,减少了悬空指针问题。
  10. 结构体和结构体方法:结构体是自定义的数据类型,用于组合不同类型的数据。Go通过结构体方法实现与结构体相关的操作,弥补了没有类继承的缺陷。

通过本次学习,我们已经对Go语言的基础模块有了初步的了解。这些模块为我们构建更复杂的程序和应用奠定了坚实的基础。接下来,您可以通过实践和进一步的学习,逐渐深入掌握这些概念,并将它们应用于实际开发中。

之后再学习像是字符串和JSON以及错误处理方面的内容吧。