基础语法
今天是Go学习的第一天,进行了Go环境的配置,下载了Go的JDK,进行了VScode的Go的扩展包的下载,进行了环境变量的配置,GOPATH,GOproject,Path Go的基础语法刚接触确实觉得很奇怪,类型后置,if else 必须大括号等等,还是需要点时间进行语法的熟悉。看了看项目的文档,发现自己对前后端的接口实现以及调用 也就是前端的很多东西并不了解,还是需要花费点时间进行学习
学习Go语言是一个很好的选择,因为它具有简单、高效、安全和并发特性。下面是一份关于Go语言基础学习笔记及环境配置的详细指南:
-
下载和安装Go:您可以从官方网站(golang.org)下载适合您操作系统的Go发行版,并按照安装向导进行安装。安装完成后,确保正确设置了GOPATH和GOROOT环境变量。
-
编辑器选择:选择一个适合您的编辑器,例如Visual Studio Code、Sublime Text、GoLand等。安装适合Go开发的插件和扩展(如Go插件、linter、代码片段等),以提供更好的开发体验。
-
Hello, World!:创建一个简单的Go程序,例如Hello World。在编辑器中新建一个文件,将以下代码复制到文件中并保存为
hello.go:
在终端中进入该文件所在的目录,然后运行go run hello.go命令。您将看到输出结果为"Hello, World!"。
- Go模块管理:Go使用模块(module)来管理依赖关系。通过使用命令
go mod init初始化一个新的模块,并使用go get命令来添加/安装依赖项。例如:
go mod init example.com/myapp
go get github.com/gin-gonic/gin
这样,您就可以在代码中导入所需的包了。
-
基本语法和数据类型:学习Go的基本语法,如变量声明、常量、运算符、条件语句和循环等。了解Go提供的不同的数据类型,如整数、浮点数、字符串、布尔值、数组、切片、映射和结构体等。
-
函数和包:掌握函数的定义和调用。了解如何将代码组织到不同的包中,并在不同的源文件中进行引用和使用。学习如何使用
import关键字导入其他包,并调用其函数和方法。 -
并发和Go协程:学习Go内置的并发编程模型。了解Go协程(goroutine)的概念,以及如何使用
go关键字创建并行执行的函数。学习使用通道(channel)实现协程间的通信和同步。 -
错误处理:了解Go的错误处理机制。学习如何使用
error类型返回错误信息,并使用defer和panic/recover来处理异常情况。 -
测试和文档:掌握Go的测试和文档编写技巧。了解如何编写单元测试和性能测试,并使用
go test命令运行测试。学习如何使用godoc工具生成和查看文档。
以上是关于Go语言基础学习笔记及环境配置的一些指南。希望对您有所帮助!如果您还有其他问题,请随时提问。
当您学习Go语言时,可以进一步深入以下几个方面:
- 结构体和方法:了解Go中的结构体(struct)和方法(method)的概念。学习如何定义结构体并添加方法,以实现面向对象编程的特性。掌握如何使用结构体实例来调用方法,并了解指针接收器和值接收器之间的区别。
- 接口和多态:学习接口(interface)的概念和用法。了解如何定义接口及其方法,并理解接口的多态性特性。使用接口来实现代码的灵活性和可扩展性。
- 并发模型:深入研究Go的并发编程模型。掌握使用互斥锁(Mutex)、读写锁(RWMutex)和条件变量(Cond)等同步原语来管理并发访问共享资源。学习使用WaitGroup和Once等工具来协调多个goroutine之间的操作。
- JSON和数据序列化:Go在标准库中提供了对JSON格式的支持。学习如何将Go数据结构转换为JSON字符串,以及如何将JSON字符串解析为Go对象。了解如何使用标签(tag)来自定义JSON的序列化和反序列化规则。
- 文件操作和目录遍历:学习如何使用os包和io/ioutil包进行文件和目录的读写操作。掌握如何打开、创建、删除和重命名文件,以及如何遍历目录并获取文件信息。
- 网络编程:了解Go在标准库中提供的网络编程支持。学习使用net包来实现TCP和UDP的通信,以及使用http包构建简单的Web服务器和客户端。
- 数据库访问:了解Go与常用数据库的集成。学习使用第三方库(如GORM、SQLx、MongoDB驱动程序等)来连接和操作各种类型的数据库,如MySQL、PostgreSQL、SQLite和MongoDB等。
以下是今天码的代码 代码展示
go的函数可以返回多个值
结构体方法--类似于类的成员函数
type user struct {
name string
password string
}
func findUser(users []user, name string) (v *user, err error, idx int) {
for in, u := range users {
if u.name == name {
return &u, nil, in
}
}
return nil, errors.New("not found"), -1
}
func main() {
u, err, idx := findUser([]user{{"wang", "1024"}, {"zhang", "1234"}}, "wang")
if err != nil { //nil -- nullptr/NULL
fmt.Println(err)
return
}
fmt.Print("The idx is", idx, "\nThe user is ", *u)
if u, err, idx := findUser([]user{{"wang", "1024"}, {"zhang", "1234"}}, "li"); err != nil {
fmt.Print(err) //not found
return
} else {
fmt.Print(u.name, idx)
}
}
错误处理
func main() {
a := "hello"
fmt.Println(strings.Contains(a, "ll"))
fmt.Println(strings.Count(a, "l"))
fmt.Println(strings.HasPrefix(a, "he"))
fmt.Println(strings.HasSuffix(a, "llo"))
fmt.Println(strings.Index(a, "ll"))
fmt.Println(strings.Join([]string{"he", "llo"}, "-"))
fmt.Println(strings.Repeat(a, 2))
fmt.Println(strings.Replace(a, "e", "E", -1))
fmt.Println(strings.Split("a-b-c", "-"))
fmt.Println(strings.ToLower(a))
fmt.Println(strings.ToUpper(a))
fmt.Println(len(a))
b := "你好"
fmt.Println(len(b))
}