相信大家或多或少都听说过 GO
语言,它是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。
那它究竟有何强大之处?它的开发者群体又是否足够庞大呢?
设计 GO
语言的目标是为了消除各种缓慢和笨重、改进各种低效和扩展性。Go是为开发大型系统的人设计的。
GO
是腾讯内部第二大热门语言,在 21年和22年 腾讯研发大数据报告 中就显示,随着腾讯云计算和大数据相关业务的迅速发展,GO
语言成为腾讯最热门的编程语言。360、小米、百度等等都有在使用 GO
。
同时根据 GO
趋势报告显示,全球范围内有 110 万专业开发者选择 GO
作为其主要开发语言。如果把以其他编程语言作为主要开发语言,同时也在使用 GO
的开发者计算在内,这一数字将高达270万,中国的 GO
语言开发者排名第一,全球占比超过16%。
GO
编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程;目前 GO
语言已经⼴泛应用于人工智能、云计算开发、容器虚拟化、⼤数据开发、数据分析及科学计算、运维开发、爬虫开发、游戏开发等领域
下面就让我们一起进入 GO
的世界吧!
GO
语言支持以下系统:Linux、Mac、Windows
安装包下载地址为:https://golang.org/dl/
GO
文件夹在安装目录下;
E:\Go\Go1.18
)key:GOROOT
val:安装的目录
命令行输入:
go version
出现上面的提示,便是安装成功!
新建文件 test.go
测试一下,内容(经典出现!😁):
package main
import "fmt"
func main() {
fmt.Println("Hello World!!!")
}
推荐使用JetBrains的Goland呢🤩
所有的 GO
源码都是以 .go
结尾
Go
编译器这个程序需要使用的包,如import "fmt"其实就是引入了fmt包。GO
语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。有四种主要声明方式:
var(声明变量)、const(声明常量)、type(声明类型)、func(声明函数)
声明的位置决定其作用域:
1)声明在函数内部,是函数的本地值,类似 private
2)声明在函数外部,是对当前包可见(包内所有.go文件都可见)的全局值,类似 protect
3)声明在函数外部且首字母大写是所有包可见的全局值,类似 public
var 变量名字 类型 = 表达式
其中 “类型” 或 “= 表达式” 两个部分可以省略其中的一个
数值类型变量对应的零值是0,布尔类型变量对应的零值是false,字符串类型对应的零值是空字符串,接口或引用类型(包括slice、指针、map、chan和函数)变量对应的零值是nil。数组或结构体等聚合类型对应的零值是每个元素或字段都是对应该类型的零值。
案例:
// int, int, int
var i, j, k int
// bool, float64, string
var b, f, s = true, 2.3, "four"
// 批量定义声明
package mai
import "fmt"
func main() {
var(
name string
age int
addr string
)
//string值默认为空
//int 默认值:0
fmt.Println(name,age,addr)
}
// 简短变量声明
// 以“名字 := 表达式”形式声明变量
name:="yjh"
age :=18
//:= 自动推导
fmt.Println(name,age)
常量的定义使用关键字const
,常量名一般使用大写字母,多个单词之间使用下划线分隔。常量的值可以是数字、字符串、布尔值等。
const name = value
案例:
const ai = 3.14159
const str = "Hello, World!"
const bi = 1<<31 - 1
const is = false
类型分为基本类型和复合类型两种。下面分别列举并说明。
基本类型 | 说明 |
---|---|
bool | 布尔型,值为true或false |
uint8-uint64 | 无符号整型,uint8取值范围为0到255,uint64取值范围为0到18446744073709551615,同时也有uint16、uint32 |
int8-int64 | 有符号整型,int8取值范围为-128到127,int64取值范围为-9223372036854775808到9223372036854775807,同时也有int16、int32 |
float32、float64 | 分别为32位、64位浮点型,可以表示小数,前者精度为7位小数,后者精度为15位小数 |
byte | 8位无符号整型,与uint8相同 |
rune | 32位有符号整型,表示一个Unicode码点 |
uintptr | 无符号整型,用于存放一个指针的地址 |
复合类型 | 说明 |
---|---|
string | 字符串类型,由一串Unicode码点组成 |
array | 数组类型,元素类型相同,长度固定 |
slice | 切片类型,可以动态增长或缩小长度 |
map | 映射类型,键值对类型 |
struct | 结构体类型,由若干个字段组成,每个字段可以是任意类型 |
interface | 接口类型,可以包含任意类型的值 |
channel | 通道类型,用于在多个goroutine之间传递数据 |
Go
语言还支持类型别名,可以用type关键字为现有的类型定义一个别名。例如:
// 将int类型定义为MyInt类型的别名
type MyInt int
类型别名在代码维护和兼容性方面有一定的作用。
总的来说,Go语言的类型非常丰富,支持基本类型和复合类型,可以满足各种编程需求。同时,Go语言的类型系统非常强
函数的定义使用关键字func
func 函数名() {}
案例:
package main
import "fmt"
func foo() {
// 在函数内部声明一个变量y
var y = 20
// 打印
fmt.Println(y)
}
func main() {
// 调用
foo()
}
Go
语言中的格式化输出是通过fmt
包实现的,它支持的格式化动词。
下面是几个常用的格式化动词及其含义:
%d
:将整数格式化为十进制整数。%f
:将浮点数格式化为十进制浮点数。%e
:将浮点数格式化为科学计数法表示。%s
:将字符串格式化为字符串。%v
:将值的默认格式表示为字符串。除了动词之外,还可以使用一些修饰符来控制输出格式,如:
%5d
:将整数格式化为长度为5的十进制整数。%6.2f
:将浮点数格式化为长度为6,保留2位小数的十进制浮点数。案例:
package main
import "fmt"
func main() {
x := 123
y := 3.14159
s := "hello"
fmt.Printf("x=%d, y=%f, s=%s\n", x, y, s)
fmt.Printf("x=%5d, y=%6.2f, s=%s\n", x, y, s)
}
相关的条件语句如下表所示:
语句 | 描述 |
---|---|
if 语句 | if 语句 由一个布尔表达式后紧跟一个或多个语句组成。 |
if…else 语句 | if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。 |
switch 语句 | switch 语句用于基于不同条件执行不同动作。 |
select 语句 | select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。 |
if 布尔表达式 {
/* 在布尔表达式为 true 时执行 */
}
if 布尔表达式 {
/* 在布尔表达式为 true 时执行 */
} else {
/* 在布尔表达式为 false 时执行 */
}
switch v {
case val1:
...
case val2:
...
default:
...
}
select {
case communication clause :
statement(s);
case communication clause :
statement(s);
/* 你可以定义任意数量的 case */
default : /* 可选 */
statement(s);
}
使用for实现循环的,共有三种形式:
for init; condition; post {} for condition{} for{}
除此以外,for循环还可以直接使用range对slice、map、数组以及字符串等进行迭代循环,格式如下:
for key, value := range oldmap {
newmap[key] = value
}
循环控制语句:
控制语句 | 详解 |
---|---|
break | 中断跳出循环或者switch语句 |
continue | 跳过当前循环的剩余语句,然后继续下一轮循环 |
continue | 将控制转移到被标记的语句 |
看到这里,相信大家对 go
有了一定的了解,同时也算入门Go
啦,接下来可以去探索更深层次的go知识了。
邀请人:杨不易呀
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。