对Go的初步认识与Go基础语法

55 阅读3分钟

初识Go语言

1.go语言的安装与vscode go环境配置:

go语言安装:

The Go Programming Language

安装到go语言官方网站安装即可,里面还有一个建议的安装文档。在安装完成之后打开cmd输入

go version

来验证是否安装成功。

vscode配置go环境:

只能说配置的很挣扎,前面都好好的但是我每次到了建立test.go文件让vscode来给我提示缺少工具的时候它就是不报错,欸我就是找不到。最后经历1个小时的乱动(其实都是在网上寻找解决方案但是也没改但是东西)阴差阳错怎么就自己蹦出来了,赶紧点全部安装给装上了。

image-20230516185852069

洗了个澡之后的更新:真想骂一句go语言md,从一开始学C语言开始函数的大括号就是在main下面的另外一行,结果今天写go,就因为这个小细节花了我将近一个小时才发现不是我环境上少配置东西了,而是go的语法特点。

引以为戒:

//正确的
package main
import "fmt"
func main(){
    fmt.Println("Hello world")
}
//错误的
package main
import "fmt"
func main()
{
    fmt.Println("Hello world")
}

接下来开始正式的学习笔记内容环节:

go语言基础语法:

什么是go?

image-20230516205525694

编译运行

//直接运行
go run test.go//编译成二进制exe文件
go build test.go
//运行
./test
​

变量与常量:

package main //main包,代表函数的主入口
import (
    "fmt" //输入输出处理的包
    "math"
)
​
func main() {
​
    //变量部分
    var a = "inital" //隐式类型声明var b, c int = 1, 2 //显式类型声明var d = truevar e float64
​
    f := float32(e)
​
    g := a + "foo"
    fmt.Println(a, b, c, d, e, f) //inital,1,2,true,0,0
    fmt.Println(g)
​
    //常量部分,常量是没有类型的,它根据使用时的情况自动判断类型
    const s string = "constant"
    const h = 500000
    const i = 3e20 / h
    fmt.Println(s, h, i, math.Sin(h), math.Sin(i))
​
}
​

go中的if/else

package main
​
import "fmt"
​
func main() {
    //golong中的if不用括号,如果在写的时候有括号的话在保存的时候编译器会自动帮你把括号去掉的
    if 7%2 == 0 {
        fmt.Println("7 is even")
    } else {
        fmt.Println("7 is odd")
    }
​
    if num := 9; num < 0 {
        fmt.Println(num, "is negative")
    } else if num < 10 {
        fmt.Println(num, "has 1 digit")
​
    } else {
        fmt.Println(num, "has multiple digits")
    }
}
​

go中的循环

package main
​
import "fmt"func main() {
    //在语法关键字上go只有for循环,没有while循环,但其实for也能实现传统while循环干的事情
    //之所以能实现传统while的功能是因为for的三要素都可以省略,这不就tnnd while吗
    i := 1
    for {
        fmt.Println("loop")
        break
    }
    for j := 7; j < 9; j++ {
        fmt.Println(j)
    }
    for n := 2; n < 5; n++ {
        if n%2 == 0 {
            continue
        }
        fmt.Println(n)
    }
    for i <= 3 {
        fmt.Print(i)
        i++
    }
}
​

switch选择语句:

package main
​
import (
    "fmt"
    "time"
)
​
func main() {
    a:=2
    //在go中switch的改动是比较大的,首先switch的变量类型可以是任意变量类型甚至是结构体
    switch a{
    case 1:
        fmt.Println("one")
    case 2:
        fmt.Println("two")
​
    case 3:
        fmt.Println("three")
​
    case 4, 5:  
        fmt.Println("four or five")
    default:
        fmt.Println("other")
    }
​
​
    //在go的switch中甚至可以将要作为flag的变量省略,那么在语法上switch可以代替任何if-else语句了
    t:=time.Now()
    switch {
    case t.Hour() < 12:
        fmt.Println("It's before noon")
    default:
        fmt.Println("It's after noon")
    }
}
​