Go 语言入门学习
基础概念
特点
- 自动垃圾回收
- 更丰富的内置类型
- 函数多返回值
- 错误处理
- 匿名函数和闭包
- 类型和接口
- 并发编程
- 反射
- 语言交互性
用途
- Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。
- 对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了
一个go文件的基础结构
-
包声明
-
引入包
-
注释
/*...*/
是注释,在程序执行时将被忽略。单行注释是最常见的注释形式,你可以在任何地方使用以//
开头的单行注释。 -
变量
-
函数
-
语句 & 表达式
基础语法
数据类型
-
布尔
var b bool = true
-
数字
整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,位的运算采用补码。
-
字符串
-
派生
-
指针类型(Pointer)
空指针:当一个指针被定义后没有分配到任何变量时,它的值为
nil
。 -
数组类型
-
声明
var arrayName [size]dataType
在 Go 语言中,数组的大小是类型的一部分,因此不同大小的数组是不兼容的,也就是说 [5]int 和 [10]int 是不同的类型
-
初始化
var numbers [5]int var numbers = [5]int{1, 2, 3, 4, 5} var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0} 或 balance := [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
-
访问
var salary float32 = balance[9]
-
-
结构化类型(struct)
-
定义
type struct_variable_type struct { member definition member definition ... member definition }
-
访问结构体成员:使用点号
.
操作符
-
-
切片类型
Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。
-
定义
var identifier []type var slice1 []type = make([]type, len) 也可以简写为 slice1 := make([]type, len)
-
操作
append() 和 copy() 函数 如果想增加切片的容量,我们必须创建一个新的更大的切片并把原分片的内容都拷贝过来。
-
-
Map 类型
- 定义
/* 使用 make 函数 */ map_variable := make(map[KeyType]ValueType, initialCapacity)
- 定义
-
函数类型
-
Channel 类型
-
接口类型(interface)
Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。 接口可以让我们将不同的类型绑定到一组公共的方法上,从而实现多态和灵活的设计。
/* 定义接口 */ type interface_name interface { method_name1 [return_type] method_name2 [return_type] method_name3 [return_type] ... method_namen [return_type] } /* 定义结构体 */ type struct_name struct { /* variables */ } /* 实现接口方法 */ func (struct_name_variable struct_name) method_name1() [return_type] { /* 方法实现 */ } ... func (struct_name_variable struct_name) method_namen() [return_type] { /* 方法实现*/ }
-
变量声明
-
声明变量的一般形式是使用 var 关键字
-
方式
// 实例1
var identifier type
var identifier1, identifier2 type
// 实例2
// 赋初值,不用给类型,自动判断
// 实例3
// := 是一个声明语句
// intVal := 1 相等于 var intVal int intVal =1
-
_
实际上是一个只写变量,你不能得到它的值。这样做是因为 Go 语言中你必须使用所有被声明的变量,但有时你并不需要使用从一个函数得到的所有返回值。- 并行赋值也被用于当一个函数返回多个返回值时,如下:
常量声明
-
常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
-
方式
const identifier [type] = value const c_name1, c_name2 = value1, value2
-
iota
,特殊常量,可以认为是一个可以被编译器修改的常量。iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。
运算符
-
算术
-
关系
-
逻辑
-
位
-
赋值
-
其他
条件判断
Go 没有三目运算符,所以不支持 ?: 形式的条件判断。
循环
函数
- 定义
func function_name( [parameter list] ) [return_types] {
// 函数体
}
// func:函数由 func 开始声明
// function_name:函数名称,参数列表和返回值类型构成了函数签名。
// parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。 // // return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。
// 函数体:函数定义的代码集合。
- 声明
/* 声明函数变量 */
getSquareRoot := func(x float64) float64 {
return math.Sqrt(x)
}
语言范围(Range)
Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。
package main
import "fmt"
func main() {
map1 := make(map[int]float32)
map1[1] = 1.0
map1[2] = 2.0
map1[3] = 3.0
map1[4] = 4.0
// 读取 key 和 value
for key, value := range map1 {
fmt.Printf("key is: %d - value is: %f\n", key, value)
}
// 读取 key
for key := range map1 {
fmt.Printf("key is: %d\n", key)
}
// 读取 value
for _, value := range map1 {
fmt.Printf("value is: %f\n", value)
}
}
类型转换
-
定义:
type_name(expression)
-
转换
-
数值类型:
var a int = 10 var b float64 = float64(a)
-
字符串类型
// strconv.Atoi 函数返回两个值,第一个是转换后的整型值,第二个是可能发生的错误,我们可以使用空白标识符 _ 来忽略这个错误 var str string = "10" var num int num, _ = strconv.Atoi(str)
package main import ( "fmt" "strconv" ) func main() { num := 3.14 str := strconv.FormatFloat(num, 'f', 2, 64) fmt.Printf("浮点数 %f 转为字符串为:'%s'\n", num, str) }
-
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfhbbij
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13