走进go语言 | 青训营笔记

147 阅读2分钟

走进go语言 | 青训营笔记

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

在次之前有着Java基础,所以我会在学习go的过程中对比Java更便于记忆。

go语言的优势

高性能、高并发

这是go语言大火的重要原因之一,再次之前的语言如Java、python都没有自带这种特性,而go作为新语言,很好的利用了多核处理器的“多核心”特性,使得go天生有着高性能、高并发的特性。

语法简单、学习曲线平滑

go语言的语法与c有点相似却比c更加简化,给我的感觉就是用着python的语法(比py更简单),实现着c++、Java的功能。

丰富的标准库

跟python一样拥有很多标准库,无需借助第三方库便可以实现很多不一样的功能,保证了稳定新。

完善的工具链

go语言有着各种各样的工具保证代码正确稳定的运行,可以说是帮助程序员省了很多问题。

静态编译

简单的说就是编译好的可执行文件可以直接运行,相比于Java需要jdk环境不同,可以说是很好在外行人面前装13的有点了。

快速编译

也是因为能够利用多核的原因,使go的编译速度对比之前的语言快的离谱,是c++开发者无法想象的一个程度。

跨平台

后出的语言基本都有的特性,在常用的操作系统上运行外,go能在一些奇怪的设备上运行,如路由器、树莓派等。

垃圾回收

c/c++的噩梦之一的垃圾回收,在go语言里面和Java一样交给它们自己处理,让开发者更专注于自己的业务开发。

go语言语法注意点

  • 强类型语言
  • 有自动推断类型,例如:
//定义且赋值 ":="自动推断类型
name2 := "s18"
age2 := 20
//打印变量类型
fmt.Printf("%T,%T", name2, age2)
  • 切片的注意点
func main() {
   //定义数组 [长度]类型{元素}
   arr := [5]int{1, 2, 3, 4, 5}
   fmt.Println(arr)
   update(arr)
   fmt.Println(arr)

   fmt.Println("--------------------")

   //定义切片   []类型{元素}
   s1 := []int{1, 2, 3}
   fmt.Println(s1)
   update2(s1)
   fmt.Println(s1)
}

func update(arr1 [5]int) {
   //值传递非破坏性 即拷贝
   arr1[0] = 5
   fmt.Println(arr1)
}

func update2(arr1 []int) {
   //引用传递破坏性 改变原切片
   arr1[0] = 5
   fmt.Println(arr1)
}
  • 对于printf
import "fmt"
type point struct {
   x, y int
}

func main() {
   s := "hello"
   n := 123
   p := point{1, 2}
   fmt.Println(s, n) // hello 123
   fmt.Println(p)    // {1 2}

   fmt.Printf("s=%v\n", s)  // s=hello
   fmt.Printf("n=%v\n", n)  // n=123
   fmt.Printf("p=%v\n", p)  // p={1 2}
   fmt.Printf("p=%+v\n", p) // p={x:1 y:2}
   fmt.Printf("p=%#v\n", p) // p=main.point{x:1, y:2}

   f := 3.141592653
   fmt.Println(f)          // 3.141592653
   fmt.Printf("%.2f\n", f) // 3.14
}