这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
本人的技术栈之前是Java,第一天的学习让我了解到了golang的基本语法与Java的不同。
首当其冲的就是变量的声明方式不同,其次还有控制语句与循环语句的不同,以及指针,结构体等等部分的不同。虽然很不适应,但是经过学习之后,可以体会到Golang在一些方面的优点。
给我印象最深的就是golang中的切片。可以说golang中的切片的功能十分丰富。这里贴出一些简单的操作。这些操作在golang中只需要一些代码,但是在java中可能就需要更多的代码。
//声明slice1是一个切片,并且初始化,默认值是1,2,3
slice1 := []int{1,2,3}
//声明slice2是一个切片,并且给slice2跟配空间
slice2 := make([]int, 3)
//追加
slice1 = append(slice1, 4)
//截取
nums := []int{1, 2, 3, 4, 5}
for _, num := range nums {
fmt.Println(num)
}
//截取是左闭右开
subarr := nums[1:3]
fmt.Printf("%v", subarr)
除了切片之外,golang中的结构体以及结构体方法的实现更是让我大吃一惊。这样的实现让golang这个面向过程的编程语言有了面向对象的特性。
//定义一个结构体
type Book struct {
title string
auth string
}
//值传递,对于struct的传递类似与基本数据类型,传递的是一个副本
//因此改动不会对原来的改变
func changeBook(book Book) {
book.auth = "li4"
}
func changeBook2(book *Book) {
//也可以直接book.auth = "li4"
// go语言对此进行了优化处理
(*book).auth = "li4"
}
golang与java的不同还体现在golang中保留了指针。但是对指针做了优化处理。结构体可以通过指针直接访问其字段,这是 Go 的语法优化。
//定义一个结构体
type Book struct {
title string
auth string
}
func changeBook2(book *Book) {
//也可以直接(*book).auth = "li4"
// go语言对此进行了优化处理
book.auth = "li4"
}
在实战项目中收获也很多。 第一个实战项目让我更加熟练了golang的基本语法。
第二个实战项目是让我收获最多的项目。除了让我了解到了curlconverter.com和OKTools这两个工具,也让我练习了对http与json等标准库的使用。
相比前两个项目,第三个项目的难度变大,学起来很吃力,还有待下一步的提高。