Go 语言入门指南:基础语法和常用特性解析 | 青训营(上)
前言
在这篇文章之前发布了一篇较为简短的笔记,但是并没有被统计上,所以这次我重新整理和加深了理解,把Go语言的基础语法再次重发一遍。
Go语言基础学习
1、什么是Go语言
当谈论Go语言(或Golang)时,可以看到它有许多令人瞩目的特点,如下所述:
-
高性能、高并发: Go语言在设计之初就注重了高性能和高并发的特性。它的协程(goroutine)和通道(channel)机制使得并发编程变得更加简单且高效,能够充分利用多核处理器,提供了出色的并发性能。
-
语言简单、学习曲线平缓: Go语言的语法设计简洁,舍弃了一些复杂的语言特性,使得学习曲线相对平缓。它具有清晰的语法规则,使初学者能够快速上手,同时也能帮助开发者编写易于维护和理解的代码。
-
丰富的标准库: Go语言的标准库提供了众多的功能模块,涵盖了网络、文件操作、并发、加密等方面,这使得开发者能够轻松构建各种类型的应用程序,减少了对第三方库的依赖。
-
完善的工具链: Go语言提供了强大且易于使用的工具链,包括编译器、格式化工具、测试工具等。这些工具的高度集成使得开发、构建和测试代码变得更加便捷。
-
静态链接: Go语言的编译器会将程序的所有依赖打包成一个单独的可执行文件,这意味着您可以轻松地将应用程序部署到不同的环境中,而无需担心运行时的依赖问题。
-
快速编译: Go语言的编译速度非常快,这加速了代码的开发和迭代过程。这对于大型项目或需要频繁修改测试的应用程序来说尤其重要。
-
跨平台: Go语言在设计时考虑了跨平台性能,因此它能够轻松地在不同的操作系统上编译和运行,无需太多的修改。
-
垃圾回收: Go语言拥有先进的垃圾回收机制,它能够自动管理内存,减少了开发者因为内存管理而需要花费的精力。这使得开发者能够更专注于业务逻辑。
总之,Go语言以其高性能、并发支持、简洁的语法和丰富的标准库等特点,逐渐成为一种受欢迎的编程语言,适用于各种应用场景。
2、Go语言基础语法
2.1 "Hello World"
package main
import (
"fmt"
)
func main() {
fmt.Println("hello world")
}
-
package main:这是Go语言程序的一个重要部分,表明这个文件属于main包,是一个可执行程序的入口文件。 -
import "fmt":import语句用于导入需要使用的包。在这里,我们导入了fmt包,它提供了格式化输入和输出的功能。 -
func main():这是程序的主函数,是程序的入口。程序从这里开始执行。 -
fmt.Println("hello world"):这一行代码调用了fmt包中的Println函数,用于在终端输出一行文本。在这里,它输出了"hello world"。
通过运行这个简单的程序,我们可以在终端中看到输出:"hello world"。这个示例展示了Go语言的基本结构,是学习和入门的一个良好起点。
2.2 变量
示例:
package main
import (
"fmt"
"math"
)
func main() {
var a = "initial"
var b, c int = 1, 2
var d = true
var e float64
f := float32(e)
g := a + "foo"
fmt.Println(a, b, c, d, e, f) // initial 1 2 true 0 0
fmt.Println(g) // initialapple
const s string = "constant"
const h = 500000000
const i = 3e20 / h
fmt.Println(s, h, i, math.Sin(h), math.Sin(i))
}
详细来说: Go语言里变量的声明为: 第一种:
var 变量名字 类型 = 表达式
其中“类型”和“表达式”可以省略其中一个 当省略“类型”时,表示根据初始化表达式来推导变量信息
var a = "initial" //a自动推导为字符串型
当省略“表达式”时,表示用零值去初始化该变量。
数值类型对应零值就是零
布尔类对应零值是false
字符串类型对应零值是空字符串
接口或引用类型变量对应的零值是nil
第二种: 简短变量声明
变量名:=等于值
也可以在=号后加上类型,进行强制类型转换
值得注意的是":="为声明语句,而"="是一个变量复制语句
例:
i, j = j, i //交换i和j的值
2.3 常量
常量的申明是把var改为const,在go语言里的常量,它没有确定的类型,而是根据使用的上下文来自动确定类型。
2.4 数据类型
Go语言将数据类型分为四类:基础类型、复合类型、引用类型和接口类型。包括基本类型(如整型、浮点型、布尔型、字符型)和复合类型(如数组、切片、映射、结构体、接口)下面是一些常用的数据类型及其取值范围:
| 1 | uint8 无符号 8 位整型 (0 到 255) |
| 2 | uint16 无符号 16 位整型 (0 到 65535) |
| 3 | uint32 无符号 32 位整型 (0 到 4294967295) |
| 4 | uint64 无符号 64 位整型 (0 到 18446744073709551615) |
| 5 | int8 有符号 8 位整型 (-128 到 127) |
| 6 | int16 有符号 16 位整型 (-32768 到 32767) |
| 7 | int32 有符号 32 位整型 (-2147483648 到 2147483647) |
| 8 | int64 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807) |
浮点型 表格:
| 1 | float32 IEEE-754 32位浮点型数 |
| 2 | float64 IEEE-754 64位浮点型数 |
| 3 | complex64 32 位实数和虚数 |
| 4 | complex128 64 位实数和虚数 |
其他数字类型 以下是一些其他类型:
| 1 | byte 类似 uint8 |
| 2 | rune 类似 int32 |
| 3 | uint 32 或 64 位 |
| 4 | int 与uint一样大小 |
| 5 | uintptr 无符号整型,用于存放一个指针 |
复合类型 以下是一些示例:
var a [5]int = [3]int{1, 2, 3,4,5}
var b []int = []int{1, 2, 3}
var c map[string]int = map[string]int{"a": 1, "b": 2}
var d struct{ x, y int } = struct{ x, y int }{1, 2}
var e interface{} = 1.23
2.5 Go的运算符
Go的运算符在使用时基本和c语言类似。 运算符的优先级:
| 5 | * / % << >> & &^ |
| 4 | + - | ^ |
| 3 | == != < <= > >= |
| 2 | && |
| 1 | || |
2.6 Go的条件语句、循环语句、跳转语句
例子:
a:=5
if a > 0{
fmt.Println("a是正数")
}else if a == 0{
fmt.Println("a是零")
}else{
fmt.Println("a是负数")
}
for i := 0; i < a; i++ {
fmt.Println(i)
}
switch a {
case 1:
fmt.Println(1)
case 2:
fmt.Println(2)
default:
fmt.Println(a)
}
这部分的代码示例展示了Go语言中的条件语句、循环语句和switch语句的使用方法。我将为您解释每一部分的含义。
a := 5
if a > 0 {
fmt.Println("a是正数")
} else if a == 0 {
fmt.Println("a是零")
} else {
fmt.Println("a是负数")
}
这部分代码使用了if语句来判断变量a的值,并根据不同情况输出不同的结果。如果a大于0,则输出"a是正数";如果a等于0,则输出"a是零";否则,输出"a是负数"。
for i := 0; i < a; i++ {
fmt.Println(i)
}
这部分代码使用了for循环来迭代从0到a-1的整数,并在每次循环中输出变量i的值。循环的条件是i < a,所以当a为5时,会输出0到4的数字。
switch a {
case 1:
fmt.Println(1)
case 2:
fmt.Println(2)
default:
fmt.Println(a)
}
最后,这部分代码使用了switch语句来根据变量a的值进行选择。如果a的值是1,输出1;如果是2,输出2;否则,输出变量a的值。
这个示例展示了Go语言中常见的控制流语句的用法,包括条件语句、循环语句和switch语句。这些语句使得您可以根据不同的条件执行不同的操作,是编程中非常重要的基本工具。
值得注意的是,类比C语言,Go语言中的if和for语句可以省略括号

OPPO公司福利 1195人发布