Go语言上手-基础语言 | 青训营笔记

92 阅读4分钟

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

1.入门Go语言

1.1什么是Go语言

Go语言特点

  1. 高性能、高并发
  2. 语法简单、学习曲线平缓
  3. 丰富的标准库
  4. 完善的工具链
  5. 静态链接
  6. 快速编译
  7. 跨平台
  8. 垃圾回收

Go语言的标准库性能就十分优秀,并不需要依赖深度优化的第三方库。

1.2字节跳动为什么全面拥抱Go

  1. 最初使用的Python由于性能问题换成Go
  2. C++不太适合在线web业务
  3. 早期团队非java背景
  4. 性能较好
  5. 部署简单、学习成本低
  6. 内部RPC和HTTP框架的推广。

2.1开发环境-安装Golang

到Go的官网> Go官网 进行下载安装go的运行环境包

如果无法访问使用国内镜像> Go国内镜像 进行下载

开发ide使用vscode或者Goland,建议使用Goland,在项目开发中更加好用。

2.2 基础语法

「Hello World」

所有编程语言的学习都是从Hllo World开始的。

先创建一个项目

image.png 我的以前写过项目文件不为空,但是都是一样的,在根目录创建一个main文件作为项目的启动入口。在里面创建main函数。

package main

import (
  "fmt"
)
func main() {
 fmt.print("Hello World")
}

go的入口包是main,入口函数也是main。在入口包和入口文件都是main的时候就可以进行编译执行。如果使用的是Goland这时就会出现启动按钮。

image.png 可以一键进行编译执行。

如果不是使用的Goland我们可以通过命令行的形式进行编译执行.可以直接执行,也可以选择先打包再执行。

#直接运行
go run /你的文件路径/main.go
#编译
go build /你的文件路径/main.go
#运行
./main.go

Go的变量

package main

import (
   "fmt"
   "math"
)

func main() {
   var a = "a"
   
   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)
   fmt.Println(g)

   const  s string="s"
   const h = 500
   const i = 3e20/h
   fmt.Println(s,h,i,math.Sin(h),math.Sin(i))
   
}

go是一个强类型语言。包括字符串、整型、布尔型、浮点型。 go的字符串可以直接用加号拼接。

go的创建新值可以使用var的方式来进行创建。如果初始化的时候赋值了,可以不声明类型。 GO语言会自己推断。如果在创建时使用:=的形式就会创建新的对象。这样就可以省略var和类型声明。例如s:="string"这样就会新建一个string类型的对象可以直接进行使用。

if else

package main

func main() {

   if 6%3==0 {
      
   }else {
      
   }
   
   if num:=9;num%2==0{
      
   }else if num%3==0 {
      
   }

}

Go的 If else。和大多数语言类似,不过判断部分不需要括号的包裹。并且在判断语句前也可以通过:=的方式声明对象,然后对对象进行相关的判断。此对象的作用域就是此if else的整体。

Go的循环

func main() {

    //死循环
    for{
        println(1)
        break
    }
    //经典循环
    for i:=0;i<3;i++ {
        println(i)
    }
    //条件循环
    i:=1
    for i<3{
        println(i)
        i=i+1
    }

}

在Go中没有while循环只有for循环。for循环代替了while的功能,可以使用break跳出循环可以使用continue结束本次循环。

switch结构

func main() {

 a:=2
 switch a {
     case 1:
         println(1)
     case 2:
         println(2)
     default:
         println(3)
 }
}

go的switch不需要使用break阻止进入下一个条件。go默认就只会执行匹配的条件,如果想要继续向下执行则需要continue语句

go中的时间处理

func main() {
     now:=time.now()
     t:=time.Date(2022,3,12,1,23,45,0,time.UTC)
     println(t.Format("2006-01-02-15:04:05"))
}

go可以通过time.now()来获取当前时间。也可以为时间进行赋值操作。 时间的序列化使用。t.Format("2006-01-02-15:04:05")来完成对字符串的转化。这和其他语言的YYYY-mm-dd的写法不同。

获取进程相关信息

func main() {

   println(os.Args)
   println(os.Getenv("PATH"))
   output, err := exec.Command("grep","127.0.0.1","/etc/hosts").CombinedOutput()
   if err != nil {
      return 
   }
   println(output)

}

os.Args表示运行时传入的参数。