什么是Go语言
Go语言(又称为Golang)是一种开源的编程语言,由Google公司于2007年开始开发,并于2009年正式发布。Go语言的设计目标是简单、高效、可靠,并具有良好的并发处理能力。它借鉴了C语言的语法和部分特性,但去除了一些复杂和冗余的特性,使得代码更加简洁易读。
Go语言的特点
1.高性能、多并发
在Golang中不需要像其他语言一样需要有高度性能优化的第三方库,只需要标准库或者任意基于标准库的第三方库
2.语法简单、学习曲线平缓
3.有着丰富的标准库
4.完整的工具链
5静态链接
6快速编译
7跨平台
8垃圾回收
第一个Go程序“Hello world”
package main //声明本代码所属的包
import "fmt" 导入fmt(format)包,使其可用
func main() { //声明一个名为main的函数
fmt.Println("HelloWorld")
}
运行后会打印出HelloWorld
Go语言代码的基本框架就是这样,尽管这段代码非常简短,但它引入了package、import、func、这三个非常重要的关键字,其中package关键字声明代码所属的包,import关键字导入自己将要用的包,而func用用于声明函数
第一个注意点 编译器唯一允许的大括号放置风格
如上述代码中“{”必须跟在()后
变量和常量
const用于声明常量,var用于声明变量(这里变量的类型就不一一叙述)
package main
import (
"fmt"
)
func main(){
const d = 1
var a = 123 //第一种声明方式
var b, c int = 1, 2 //第二种声明方式
var ( //第三种声明方式
f = 12
g = 78
)
u := 2 //第四种声明方式
fmt.Println("a=", a)
fmt.Println("b,c,f,g,u=", b, c, f, g, u)
}
以上代码块提供了四种不同的声明方式,个人认为需要尤为关注的是第四种简略的声明方式,在后续代码中会大规模使用。
第二个注意点
Go语言要求声明的变量必须在后续的代码中使用,也可以使用下划线来忽略不需要使用的变量。(不同于作者使用过的其他语言)
if else语句
用法与其他语言类型,不同在于if后没有括号,条件直接写在if后面,条件后再加大括号
package main
import (
"fmt"
)
func main() {
b := 1
if b == 1 {
fmt.Println("true")
} else {
fmt.Println("false")
}
}
上面代码会打印出true
for循环
在Go语言中只有for循环,没有while或者do while,同样没有括号,其余用法和其他语言类似。 这里只写for循环部分
for g := 0; g < 2; g++ {
fmt.Println(a, c)
}
switch
switch用法与其他语言类似,不做赘述,这里要注意的就是default在不同语言中代表的用法不同,还有go中不用break停止switch
switch a {
case 1:
fmt.Println("one")
case 123:
fmt.Println("two")
default:
fmt.Println("other")
}
数组
这里唯一注意点就是在Go语言中数组的长度可以用内置的len函数确定
q := [5]int{1, 2, 3, 4, 5}
fmt.Println(q)
还可以再次声明复制数组
如:a:=q
二位数组等就不赘述
切片数组
与数组声明类似,不过要注意不加长度,而且可以用append来扩大切片如:
原数组=append(原数组,"")
还可以这样用fmt.Println(q[2,5]),这样的意思是打印出q数组索引为2-5的值
哈希map
在Go语言中,Map是一种无序的键值对集合,也被称为字典或关联数组。Map中的每个元素都由一个唯一的键和对应的值组成。 以下是Map的基本用法和示例代码:
-
声明和初始化Map:
// 声明一个空的Map var m map[keyType]valueType // 声明并初始化一个Map m := make(map[keyType]valueType) // 声明并初始化一个Map,并添加初始元素 m := map[keyType]valueType{ key1: value1, key2: value2, }其中,
keyType表示键的类型,valueType表示值的类型。可以使用make函数创建一个空的Map,或者使用字面量方式声明并初始化Map。 -
添加和访问Map中的元素:
// 添加元素 m[key] = value // 获取元素 val := m[key]使用
m[key]的方式可以添加或修改Map中的元素,键不存在时会新增元素,键存在时会更新对应的值。使用m[key]的方式可以获取Map中指定键的值。 -
删除Map中的元素:
delete(m, key)使用
delete函数可以删除Map中指定键的元素。 以下是一个完整的示例代码:
package main
import "fmt"
func main() {
// 声明并初始化一个Map
m := map[string]int{
"apple": 1,
"banana": 2,
"orange": 3,
}
// 添加元素
m["grape"] = 4
// 获取元素
fmt.Println(m["apple"]) // 输出: 1
fmt.Println(m["banana"]) // 输出: 2
fmt.Println(m["orange"]) // 输出: 3
fmt.Println(m["grape"]) // 输出: 4
// 删除元素
delete(m, "orange")
// 遍历Map
for key, value := range m {
fmt.Println(key, value)
}
}
在上述代码中,我们首先声明并初始化了一个Map,然后添加了一个新的元素。接着,我们通过键来访问和获取Map中的元素值,并使用delete函数删除了一个元素。最后,使用range关键字遍历了整个Map,并打印出每个键值对。
指针
指针是指向另一变量的地址的变量,这是一种间接访问的形式。
1.声明指针
var ptr *Type
这里的Type表示指针变量指向值的类型
2.创建指针变量:
var num int = 10
var ptr *int = &num
这里的&操作符号可以获取变量的内存地址并赋值给指针变量
3.打印指针指向的值
fmt.Println(*ptr)
这里的"*"操作符就可以访问指向的值
4.修改指向的值
*ptr = 20
第三个注意点
这里的修改指向值必须是这个形式,不然会报错。尽管很多用法和C语言中的类似,但是要注意go语言的指针不支持指针的运算或比较,而且go语言可以返回局部变量的值(不会像C语言一样导致悬空指针的问题),最后go语言还有默认的nil零值。
结构体
Go语言中的结构体是一种自定义的数据类型,它允许我们将不同的数据字段组合在一起,形成一个更复杂的数据结构。结构体在Go语言中被广泛用于表示实体对象或数据的集合。(个人感觉跟C语言中差不多) 下面是一个简单的示范
p:=Person{
name:"Mike",
age: 30,
}
访问结构体的字段也简单,只需要这样:
p.name
结构体还可以相互嵌套
如:
type Address struct {
city string
state string
}
type Person struct {
name string
age int
address Address
}
总结
这里面也只是写了部分基础语法知识,还有很多的基础语法知识这里面没有涉及,比如接口、错误处理等。总的来说,大概学习了Go语言的基础语法,可以明显感觉到他的语言更为简洁高效,虽然我还没有把语法完全弄懂,但是在后续的学习中会逐步上手了解。 可能这篇文章的内容不是完全正确,望评论区大佬斧正。