在第一天的学习中,老师带领我们初步了解了GO语言的基本语法规则和使用方法,并且通过三个小项目让我们把学习到的GO语言知识应用到了实际开发过程中,在实战中逐渐加深对于GO语言的整理.
GO语言的常用语法如下:
go语言是一门强类型语言,每一个变量都有它自己的变量类型。常见的变量类型包括 字符串 整数 浮点型、布尔型等。
go 语言的字符串是内置类型,可以直接通过加号拼接,也能够直接用等于号去比较两个字符串。 其实我们可以发现在go语言里面,大部分运算符的使用和优先级都和 C或者 C++类似
在go语言里面变量的声明有两种方式,一种是通过 va ar name string ="" 这种方式来声明变量,声明变量的时候,一般会自动去推导变量的类型。如果有需要,你也可以显示写出变量类型另一种声明变量的方式是:使用变量 冒号:=等于值。
go语言里的常量就是把 var 改成const,值得注意go语言里面的常量,它没有确定的类型,会根据使用的上下文来自动确定类型。
`package main
import (
"fmt"
_ "fmt"
"math"
_ "math"
)
func main() {
var a = "dkfmc"
var b, c int = 1, 2
var d = true
var e float64
f := float32(e)
g := a + "foc"
fmt.Println(a, b, c, d, e, f, g)
const s string = "constant"
const h = 5000000000
const i = 3e20 / h
fmt.Println(s, h, i, math.Sin(h), math.Sin(i))
}`
条件语句和循坏语句也跟其他语言有相似之处,根据之前 c语言的基础可以触类旁通,很快掌握.不同点在于if后面没有小括号加上,后面需要直接跟上大括号
`package main
import "fmt"
func main() { x := 5
if x > 0 {
fmt.Println("x is positive")
} else if x == 0 {
fmt.Println("x is zero")
} else {
fmt.Println("x is negative")
}
for i := 0; i < 5; i++ {
fmt.Println(i)
}
y := 0
for y < 5 {
fmt.Println(y)
y++
}
z := 0
for {
fmt.Println(z)
z++
if z >= 5 {
break
}
}
} `
go语言中的结构体也有一些值得注意的地方.在 Go 语言中,结构体(Struct)是一种用户定义的数据类型,用于组合不同类型的数据字段。它允许我们创建一个自定义的数据结构,以便更好地组织和操作相关数据。每个结构体可以包含多个字段(也称为成员),每个字段可以是不同的数据类型。
在 Go 中,我们可以使用 type 关键字来定义一个结构体。结构体的字段由字段名和字段类型组成,通过大括号 {} 将字段定义组合在一起。以通过声明一个结构体变量并初始化其字段来创建结构体实例.我们可以使用点 . 运算符,你可以访问结构体中的字段.最后,结构体可以嵌套在其他结构体中,以创建更复杂的数据结构.
`package main
import "fmt"
type Person struct { FirstName string LastName string Age int }
func main() { person := Person{ FirstName: "John", LastName: "Doe", Age: 30, }
fmt.Println("Name:", person.FirstName, person.LastName)
fmt.Println("Age:", person.Age)
} `
还有一类很重要的操作就是对字符串的处理,go语言里面的字符串操作有很多。在标准库 strings 包里面有很多常用的字符串名工具函数,比如 contains 判断一个字符串里面是否有包含另一个字符串,count 字符串计数,index 查找某个字符串的位置。join 连接多个字符串 repeat 重复多个字符串 replace 替换字符串。
`package main
import ( "fmt" "strings" )
func main() { str1 := "Hello, World!" str2 := "Golang"
// 字符串拼接
str3 := str1 + " " + str2
// 获取字符串长度
length := len(str1)
// 获取字符串中的单个字符
char := str1[0]
// 遍历字符串
for index, char := range str1 {
fmt.Printf("Index: %d, Character: %c\n", index, char)
}
// 字符串切片
substring := str1[7:12]
// 字符串比较
isEqual := str1 == str2
// 判断字符串是否包含指定子字符串
contains := strings.Contains(str1, "Hello")
// 返回子字符串在字符串中的索引
index := strings.Index(str1, "World")
// 字符串分割
parts := strings.Split(str1, ",")
// 字符串拼接
newStr := strings.Join(parts, "-")
// 字符串替换
newStr = strings.Replace(str1, "Hello", "Hi", 1)
// 字符串大小写转换
upper := strings.ToUpper(str1)
lower := strings.ToLower(str2)
// 去除开头和结尾的空格
trimmed := strings.TrimSpace(" some text ")
// 打印结果
fmt.Println("str3:", str3)
fmt.Println("Length:", length)
} ` go语言除了上述的基础语法之外,还具有许多适应于现代工程开发的特性,根据老师的讲解和上网查阅资料大概归纳如下:
-
静态类型和编译型语言: Go 是一种静态类型语言,这意味着在编译时就必须明确指定变量的类型。这有助于在编译阶段捕捉类型错误,提高代码的可靠性。此外,Go 是编译型语言,通过编译器将源代码编译成机器码,这样执行速度更快。
-
并发支持: Go 在语言级别内置了轻量级的协程(Goroutine)和通信机制(Channels)。协程是一种比传统线程更轻量、更高效的并发单位,使得同时处理大量任务变得简单。Channels 是协程之间进行通信和同步的机制,使得数据共享变得安全和方便。
-
包管理和导入: Go 的包(Package)系统有助于将代码模块化和组织,使得项目的结构更清晰,便于复用。通过明确的导入路径,可以轻松引用其他包中的代码。
-
错误处理: 在 Go 中,错误被视为一种普通的返回值。这鼓励了显式的错误检查和处理,提高了代码的可靠性。通过多值返回,函数可以返回一个值和一个错误,使得错误信息更具描述性。
-
函数式编程特性: Go 支持函数作为一等公民,这意味着函数可以像其他数据类型一样被传递和操作。这为实现函数式编程的思想提供了支持,如将函数作为参数传递、返回函数等。
-
开源社区: Go 语言拥有一个活跃的开源社区,提供了丰富的第三方库和工具。这些库涵盖了各种应用领域,可以加速开发过程,减少重复造轮子。
-
内置的网络库: Go 提供了标准库中的
net包,用于处理网络编程。它支持 TCP、UDP、HTTP 等协议,使得创建网络应用和服务变得简单而高效。 -
工具链和标准库: Go 附带了一组强大的工具,如格式化工具
gofmt和测试工具go test,帮助开发者编写可维护和高质量的代码。标准库中包含了许多常用的功能模块,如文件操作、加密、并发等。