Go 基础笔记——基础语法 DAY 01| 青训营

165 阅读5分钟

DAY1 | Go语言的环境配置和基础语法

Go语言特性——高性能,高并发

语法风格类似C语言

个人认为

Go 比起 C 和 C++ 确实有它的优点,这是很显然的事情。它比起 Java 也有少数优点,然而相对而言更多是不足之处。所以我对 Go 的偏好在比 Java 稍低一点的位置。

Go 语言比起 C,C++ 的强项,当然是它的简单性和垃圾回收。由于 C 和 C++ 的设计有很多历史遗留问题,所以 Go 看起来确实更加优雅和简单。比起那些大量使用设计模式的 Java 代码,Go 语言的代码也似乎更简单一些。另外,Go 的垃圾回收机制比起 C 和 C++ 的全手动内存管理来说,大大降低了程序员的头脑负担

安装GoLand:

安装GoLand,在官网JetBrains GoLand:不只是 Go IDE下载goland的最新版本

接着使用破解插件进行破解

破解完成后,在SDK中添加之前下载的go源文件,配置GoRoot的位置

接着在设置-插件中找到简中语言包,进行汉化

VsCode中配置Go语言的环境:

在扩展中下载Go语言的官方插件

接着创建一个go文件,在右下角弹出的提示框中点击install all,自动下载配置文件

Go语言的语法

1、Go 程序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号

2、一行代表一个语句结束,无需分号

3、字符串可以通过加号直接拼接

4、变量的声明必须使用空格隔开

var a = "initial"
    //字符串
var b, c int = 1, 2
var d = true
    //布尔型
var e float64
    //浮点型

5、if 和 else

使用方法和C++类似,if 的条件后无需加括号,只需要空格

6、for循环为go语言唯一的循环结构,以下是go语言的常见用法

用法一:for 赋值表达式; 判断条件; 赋值同时控制变量增减 { }

for i:=0; i<10; i++ { 
    // 循环10次
}

用法二:for 条件 { }

i := 0
for i<10 {
    // 只要条件满足就循环,尝尝在这里修改循环条件来控制循环
}

用法三:for {}

go{
    //死循环,一般配合if和break使用
}

课堂实例:

package GoSpace
​
import "fmt"func main() {
    i := 1
    for {
        fmt.Println("loop")
        break
    }
    for j := 7; j < 9; j++ {
        fmt.Println(j)
    }
    for n := 0; n < 5; n++ {
        if n%2 == 0 {
            continue
        }
        fmt.Println(n)
    }
    for i <= 3 {
        fmt.Println(i)
        i = i + 1
    }
}

7、switch语句

从上往下逐一匹配case分支,直到匹配成功为止

匹配项后面无需添加break

switch var1 {
    case var1:
        ...
    case var2:
        ...
    case var3:
        ...
    default:
        ...
}

8、go语言的数组(Array)和切片(Slice)的区别

go语言的数组长度是不变的,而切片解决的是对不定长度的数组的需求

数组的初始化方式为

a :=[3]int{1,2,3}//指定长度为3
a :=[]int{1,2,3}//不指定长度

切片的初始化方式为

s := make([]int,3)//指定长度为3
s := []int{1,2,3}//不指定长度

使用make来创建一个切片

切片的长度是切片中元素的数量,实际上是从数组中获取某一部分的数据

len切⽚<=cap切⽚<=len数组

切⽚是可索引的,并且可以由 len() ⽅法获取⻓度,

切⽚提供了计算容量的⽅法 cap(), 可以测量切⽚最⻓可以达到多少

PS:数组计算cap()结果与len()相同

总之,切片是底层数组的一个引用,对切片进行的任何修改都会反映在底层的数组中

数组是值类型,切片是引用类型

9、map集合

key-value形式的数据结构,JAVAmap作用是一样的。

map的基本操作

var m map[string]int//map的声明
m = make(map[string]int)//map的初始化
m["age"]=100//在map中添加数据
fmt.Printf("%v", m)//打印map数据

map的声明和初始化的区别

未初始化的map是nil,这时map无法添加值

nil相当于空指针,不指向任何内存地址

make()方法用于给map分配内存地址

10、range遍历

用于迭代for循环中的数组,切片,map

goland使用时遇到的问题

1、CreateProcess error=216, 该版本的 %1 与你运行的 Windows 版本不兼容

解决:每个 Go 应用程序都包含一个名为 main 的包。即所有的 Go 文件以 package 开头,对于独立运行的执行文件必须是 package main

2、goland的运行配置

先在设置中配置好GOPATH

image-20230725161355235

在运行配置中配置好文件路径

image-20230725161445610

个人认为Go语言有一点不太好

静态编译的程序当然是很好的,没有额外的运行时依赖,部署时很方便。

但是静态编译的文件尺寸很大。如果一个软件系统由多个可执行程序构成,累加起来就很可观。如果用动态编译,发布时带同一套动态库,可以节省很多容量。更关键的是,动态库可以运行时加载和卸载,这是静态库做不到的。还有那些LGPL等协议的第三方C库受版权限制是不允许静态编译的。至于动态库的版本管理难题,可以通过给动态库内的所有符号添加版本号解决。无论如何,应该给予程序员选择权,让他们自己决定使用静态库还是动态库。一刀切的拒绝动态编译是不合适的。