Go 语言入门指南:基础语法和常用特性|青训营

2023年 7月 25日 140.3k 0

GoLang语言入门

简介

GoLang(也被称为Go)是一门由Google开发的开源编程语言。它在许多方面都非常优秀,具有以下特点:

  • 高性能、高并发:Go语言通过轻量级的线程(goroutine)和通信原语(channel)实现高效的并发编程,适合构建高性能的分布式系统。
  • 语法简单、学习曲线平缓:Go的语法设计简洁,易于理解,没有繁琐的特性和复杂的用法,初学者可以快速上手。
  • 丰富的标准库:Go拥有一个强大的标准库,涵盖了网络、文件处理、加密、文本处理等多个领域,开发者可以直接使用这些库来提高开发效率。
  • 完善的工具链:Go提供了一套全面的工具,包括格式化工具、测试工具、性能分析工具等,方便开发者进行代码管理和优化。
  • 静态链接:Go语言的编译器将所有依赖打包为一个可执行文件,简化了部署和交付过程。
  • 快速编译:Go的编译速度很快,对于大型项目也能快速完成编译,提高了开发效率。
  • 跨平台:Go可以在各种操作系统上运行,开发者可以在不同平台上编译和运行相同的代码。
  • 垃圾回收:Go拥有自动内存管理,内置垃圾回收机制,开发者不需要手动管理内存,减少了出现内存泄漏的可能性。
  • 基础语法

    HelloWorld

    package main
    
    import "fmt"
    
    func main() {
    	fmt.Println("HelloWorld!")
    }
    

    定义变量

    Go语言中的基本数据类型包括:

    • 布尔类型:bool
    • 字符串类型:string
    • 整数类型:int, int8, int16, int32, int64
    • 无符号整数类型:uint, uint8, uint16, uint32, uint64, uintptr
    • 字节类型:byte(uint8的别名)
    • Unicode字符类型:rune(int32的别名)
    • 浮点数类型:float32, float64
    • 复数类型:complex64, complex128
    package main
    
    import "fmt"
    
    func main() {
    	var a = 100 // 使用var关键字声明变量,编译器自动推断类型
    	fmt.Println("a =", a)
    
    	c := 'A' // 使用:=短变量声明,编译器自动推断类型
    	fmt.Println("c =", c)
    
    	var b float64 = 64.648 // 显式声明变量类型
    	fmt.Println("b =", b)
    
    	const name = "stacker" // 常量声明
    	fmt.Println("name =", name)
    }
    

    if - else流程控制语句

    package main
    
    import (
    	"fmt"
    	"math"
    )
    
    func pow(x, n, lim float64) float64 {
    	if v := math.Pow(x, n); v = %g\n", v, lim)
    	}
    	// 这里开始就不能使用 v 了
    	return lim
    }
    
    func main() {
    	fmt.Println(
    		pow(3, 2, 10),
    		pow(3, 3, 20),
    	)
    }
    

    for循环

    在Go语言中,for循环可以用于多种情况。

  • 类似C语言中的for循环:
  • package main
    
    import "fmt"
    
    func main() {
    	sum := 0
    	for i := 0; i < 10; i++ {
    		sum += i
    	}
    	fmt.Println(sum)
    }
    
  • 类似C语言中的while循环:
  • package main
    
    import "fmt"
    
    func main() {
    	sum := 1
    	for sum < 1000 {
    		sum += sum
    	}
    	fmt.Println(sum)
    }
    
  • 无限循环(类似C语言中的While(1)):
  • package main
    
    func main() {
    	for {
    		// 循环体
    	}
    }
    

    switch分支结构

    Go语言的switch语句与C、Java等语言有所不同。Go的switch默认是带有break的,即匹配到一个分支后会自动跳出switch,不会继续执行其他分支。如果需要贯穿多个分支,可以使用fallthrough关键字实现。

    package main
    
    import (
    	"fmt"
    	"runtime"
    )
    
    func main() {
    	fmt.Print("Go runs on ")
    	switch os := runtime.GOOS; os {
    	case "darwin":
    		fmt.Println("OS X.")
    	case "linux":
    		fmt.Println("Linux.")
    	default:
    		fmt.Printf("%s.\n", os)
    	}
    }
    

    数组

    package main
    
    import "fmt"
    
    func main() {
    	var a [2]string
    	a[0] = "Hello"
    	a[1] = "World"
    	fmt.Println(a[0], a[1])
    	fmt.Println(a)
    
    	primes := [6]int{2, 3, 5, 7, 11, 13}
    	fmt.Println(primes)
    }
    

    切片*

    切片是Go中重要的数据结构,可以看作是数组的一种引用。切片提供了对数组的动态访问,更加灵活和方便。

    package main
    
    import "fmt"
    
    func main() {
    	primes := [6]int{2, 3, 5, 7, 11, 13}
    
    	var s []int = primes[1:4]
    	fmt.Println(s)
    }
    

    使用make函数创建切片:

    package main
    
    import "fmt"
    
    func main() {
    	a := make([]int, 5)
    	printSlice("a", a)
    
    	b := make([]int, 0, 5)
    	printSlice("b", b)
    
    	c := b[:2]
    	printSlice("c", c)
    
    	d := c[2:5]
    	printSlice("d", d)
    }
    
    func printSlice(s string, x []int) {
    	fmt.Printf("%s len=%d cap=%d %v\n",
    		s, len(x), cap(x), x)
    }
    

    使用append函数向切片追加元素:

    package main
    
    import "fmt"
    
    func main() {
    	var s []int
    	printSlice(s)
    
    	// 添加一个空切片
    	s = append(s, 0)
    	printSlice(s)
    
    	// 这个切片会按需增长
    	s = append(s, 1)
    	printSlice(s)
    
    	// 可以一次性添加多个元素
    	s = append(s, 2, 3, 4)
    	printSlice(s)
    }
    
    func printSlice(s []int) {
    	fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
    }
    

    map

    map是Go语言中的一种关联数据类型,也称为字典或哈希表。它由一系列键值对组成,每个键值对表示一个映射关系。

    package main
    
    import "fmt"
    
    type Vertex struct {
    	Lat, Long float64
    }
    
    var m map[string]Vertex
    
    func main() {
    	m = make(map[string]Vertex)
    	m["Bell Labs"] = Vertex{
    		40.68433, -74.39967,
    	}
    	fmt.Println(m["Bell Labs"])
    }
    

    range

    range用于遍历数组、切片、字符串、map等数据结构。它返回索引和元素的值。

    package main
    
    import "fmt"
    
    var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}
    
    func main() {
    	for i, v := range pow {
    		fmt.Printf("2**%d = %d\n", i, v)
    	}
    }
    
    package main

    import "fmt"

    func main() {
    pow := make([]int, 10)
    for i := range pow {
    pow[i] = 1

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论