GO语言基本语法
文章平均质量分 92
行走的皮卡丘
自律 学习 坚强 ,拒绝迷茫。毕业于广东石油化工学院(电子信息工程学院)。本人主要学习golang(go)语言,python,kotlin,还有HTML,CSS,JavaScript等等,正在努力中........
展开
-
15-反射-2-应用
文章目录一 反射的使用1.1 反射操作简单数据类型1.2 反射进行类型推断1.3 反射操作指针1.4 反射操作结构体二 反射调用函数与方法2.1 使用反射调用函数2.2 反射调用方法一 反射的使用1.1 反射操作简单数据类型 var num int64 = 100 // 设置值:指针传递 ptrValue := reflect.ValueOf(&num) newValue := ptrValue.Elem() // Elem()用于获取原原创 2020-11-19 12:03:54 · 232 阅读 · 0 评论 -
15-反射-1-概述
文章目录一 反射简介二 反射是如何实现的三 Go中反射初识3.1 reflect包的两个函数3.2 静态类型与动态类型一 反射简介反射是指在程序运行期对程序本身进行访问和修改的能力,即可以在运行时动态获取变量的各种信息,比如变量的类型(type),类别(kind),如果是结构体变量,还可以获取到结构体本身的信息(字段与方法),通过反射,还可以修改变量的值,可以调用关联的方法。反射常用在框架的开发上,一些常见的案例,如JSON序列化时候tag标签的产生,适配器函数的制作等,都需要用到反射。反射的两个使用原创 2020-11-19 12:03:21 · 392 阅读 · 1 评论 -
14-时间操作
文章目录一 时间操作1.1 创建时间1.2 时间格式化与解析1.3 获取 年 月 日1.4 时间戳1.5 时间间隔1.6 时间睡眠二 时间中的通道操作(定时器)一 时间操作1.1 创建时间Golang中时间操作位于 time 包中,常见操作有: // 当前时间 nowTime := time.Now() fmt.Printf("当前时间为:%T\n", nowTime) // 其类型是 time.Time fmt.Println(nowTime) // 2019-01-01 13:原创 2020-11-19 12:02:39 · 653 阅读 · 0 评论 -
13-文件操作-2-读操作
文章目录一 文件读取1.1 直接读取 read()1.2 bufio的写操作1.3 io/ioutil 包文件读取二 文件写入2.1 直接写2.2 bufio的写操作2.3 io/ioutil 包文件写入三 文件读取偏移量一 文件读取文件读写的接口位于io包,file文件类是这些接口的实现类。1.1 直接读取 read()read() 实现的是按字节数读取: readByte := make([]byte, 128) // 指定要读取的长度 for { n, err := f.Read原创 2020-11-19 12:01:59 · 309 阅读 · 0 评论 -
13-文件操作-1-写操作
文章目录一 文件的基本操作1.1 创建文件1.2 打开文件,写入内容1.3 写文件1.4 获取文件描述信息 os.Stat()1.5 路径、目录操作1.6 删除文件一 文件的基本操作1.1 创建文件 f, err := os.Create("test.txt") if err != nil { fmt.Println(err) return } fmt.Println(f) // 打印文件指针 f.Close() // 打开的资源在不使用时必须关闭使用Create()原创 2020-11-19 12:01:20 · 448 阅读 · 0 评论 -
12-接口类型-2-断言与多态
文章目录一 断言二 接口类型转换三 多态一 断言接口是编程的规范,他也可以作为函数的参数,以让函数更具备适用性。在下列示例中,有三个接口动物接口、飞翔接口、游泳接口,两个实现类鸟类与鱼类:鸟类:实现了动物接口,飞翔接口鱼类:实现了动物接口,游泳接口package mainimport "fmt"// 定义一个通用接口:动物接口type Animal interface { Breath() // 动物都具备 呼吸方法}type Flyer interface { Fly原创 2020-11-19 12:00:39 · 267 阅读 · 0 评论 -
12-接口类型-1-接口的使用
接口 interface接口(interface)是调用方和实现方均需要遵守的一种约束,约束开发者按照统一的方法命名、参数类型、数量来处理具体业务。实际上,接口就是一组没有实现的方法声明,到某个自定义类型要使用该方法时,根据具体情况把这些方法实现出来。接口语法:type 接口类型名 interface { 方法名1(参数列表) 返回值列表 方法名2(参数列表) 返回值列表 ...}示例:package mainimport "fmt"// 运输方式type Transporter原创 2020-11-19 11:59:59 · 387 阅读 · 0 评论 -
11-面向对象-2-三大特性
文章目录一 面向对象三大特性1.1 封装1.2 继承1.3 多态一 面向对象三大特性1.1 封装封装:把抽象出的字段和对字段的操作封装在一起,数据被保护在内部,程序的其它包只有通过被授权的操作(方法),才能对字段进行修改,其作用有:隐藏实现细节可以对数据进行验证,保证安全合理Golang对面向对象做了极大简化,并不强调封装特性,下列示例进行模拟实现:在person包下新建person.go文件:package personimport "fmt"type person struc原创 2020-11-18 19:29:40 · 185 阅读 · 1 评论 -
11-面向对象-1-构造函数与方法
文章目录一 面向对象初识1.1 模拟构造函数1.2 父子关系结构体初始化1.3 Go中的面向对象初识二 方法2.1 方法2.2 Go方法本质一 面向对象初识1.1 模拟构造函数Go和传统的面向对象语言如Java有着很大区别。结构体没有构造函数初始化功能,可以通过以下方式模拟:package mainimport ( "fmt")type Person struct { Name string Age int}func NewPersonByName(name string) *原创 2020-11-18 19:28:32 · 244 阅读 · 0 评论 -
10-函数-2-闭包
文章目录一 闭包1.1 闭包概念1.2 闭包案例一 简单示例1.3 闭包案例二 实现累加器一 闭包1.1 闭包概念闭包是引用了自由变量的函数,被引用的自由变量和函数一同存在,即使己经离开了自由变量的环境也不会被释放或者删除,在闭包中可以继续使用这个自由变量。简单的说 : 函数+引用环境=闭包贴士:闭包( Closure)在某些编程语言中也被称为 Lambda表达式(如Java)在闭包中可以修改引用的变量:str := "hello"foo := func(){ // 声明一个匿名函数原创 2020-11-18 19:28:02 · 221 阅读 · 0 评论 -
10-函数-1-函数简介
文章目录一 函数1.1 函数声明1.2 值传递和引用传递1.3 可变参数1.4 匿名函数1.5 函数类型二 Go函数特性总结三 两个特殊函数3.1 init函数3.2 new函数3.3 make函数一 函数1.1 函数声明函数声明格式:func 函数名字 (参数列表) (返回值列表){ // 函数体 return 返回值列表}注意:函数名首字母小写为私有,大写为公有;参数列表可以有0-多个,多参数使用逗号分隔,不支持默认参数;返回值列表返回值类型可以不用写变量名如果只有一个返回值原创 2020-11-18 19:27:35 · 242 阅读 · 0 评论 -
09-引用类型-2-集合
文章目录一 集合map1.1 map的创建1.2 map的使用1.3 并发安全的map一 集合map1.1 map的创建Go内置了map类型,map是一个无序键值对集合(也有一些书籍翻译为字典)。普通创建:// 声明一个map类型,[]内的类型指任意可以进行比较的类型 int指值类型m := map[string]int{"a":1,"b":2}fmt.Print(m["a"])make方式创建map:type Person struct{ ID string Name string原创 2020-11-18 19:26:23 · 197 阅读 · 0 评论 -
09-引用类型-1-切片
文章目录一 切片创建二 切片常见操作2.1 切片常见内置函数2.2 切片的一些简便操作2.3 切片的截取1.7 字符串转切片三 切片存储结构四 切片作为函数参数一 切片创建切片(slice)解决了数组长度不能扩展,以及基本类型数组传递时产生副本的问题。常用创建方式:var s1 []int // 和声明数组一样,只是没有长度,但是这样做没有意义,因为底层的数组指针为nils2 := []byte {'a','b','c'}fmt.Println(s1) //输出 []fmt.Pri原创 2020-11-18 19:25:42 · 309 阅读 · 0 评论 -
08-常量
文章目录一 常量二 无类型常量一 常量常量:在编译阶段就确定下来的值,程序运行时无法改变。定义方式:const A = 3const PI float32 = 3.1415const mask = 1 << 3 //常量与表达式 错误写法:常量赋值是一个编译期行为,右边的值不能出现在运行时才能得到结果的值。const HOME = os.GetEnv("HOME")二 无类型常量一个常量可以有任意一个确定的基础类型,例如int或float64,但是许多常量并没原创 2020-11-18 19:24:41 · 235 阅读 · 0 评论 -
07-类型转换与别名
文章目录一 数据类型转换1.1 显式转换1.2 数值类型转换1.3 基本数据类型与字符串转换二 类型别名2.1 类型别名的使用2.2 不同包下的类型定义2.3 不同包下的类型别名三 Go的类型系统补充3.1 命名类型和未命名类型3.2 底层类型3.3 Go中的类型相同一 数据类型转换1.1 显式转换Go在不同类型的变量之间赋值时需要显式转换。也就是说Golang中数据类型不能自动转换。1.2 数值类型转换var i int32 = 100var n1 float64 = float64(i)f原创 2020-11-17 13:10:12 · 252 阅读 · 0 评论 -
06-值类型-4-结构体
文章目录一 结构体的基本使用二 结构体地址与实例化四 内嵌结构体四 匿名字段一 结构体的基本使用结构体可以用来声明新的类型,作为其他类型的属性/字段的容器,如下定义一个学生结构体:type Person struct { name string age int}//按顺序初始化:每个成员都必须初始化var p1 Person = Person{"lisi", 20}//制定成员初始化:没有被初始化的,自动赋零值p2 := Person{age:30} // new 申请结构体p原创 2020-11-17 13:09:35 · 193 阅读 · 0 评论 -
06-值类型-3-数组
文章目录一 数组1.1 数组的声明1.2 数组常用操作1.3 数组的遍历1.4 数组使用注意事项一 数组1.1 数组的声明数组是一段固定长度的连续内存区域。数组的长度定义后不可更改,长度使用 len() 获取。var arr1 [10]int //定义长度为10的整型数组,很少这样使用arr2 [5]int := [5]int{1,2,3,4,5} //定义并初始化arr3 := [5]int{1,2,3,4,5} //自动推导并初始化arr4 := [5]int{1,2}原创 2020-11-17 13:08:53 · 140 阅读 · 0 评论 -
06-值类型-2-字符串
文章目录一 字符二 字符串三 字符串常用操作3.1 len()函数与字符串遍历3.2 string()函数类型转换3.3 字符串连接四 strings包相关函数五 strconv包的字符串转换函数一 字符Golang 中没有专门的字符类型,如果要存储单个字符(字母),一般使用 byte 来保存,且使用单引号包裹。var c1 byte = 'a'var c2 byte = '0'fmt.Println("c1=", c1) //输出 97 fmt.Println("c2=", c2)原创 2020-11-17 13:08:16 · 210 阅读 · 0 评论 -
06-值类型-1-数值类型
文章目录一 数值类型二 整数三 浮点类型3.1 浮点类型的分类3.2 精度损失3.3 浮点数判断相等四 复数五 NaN非数一 数值类型数值类型指基本类型中的:整型、浮点型、复数。二 整数整数类型有无符号(如int)和带符号(如uint)两种,这两种类型的长度相同,但具体长度取决于不同编译器的实现。int8、int16、int32和int64四种有符号整数类型,分别对应8、16、32、64bit大小的有符号整数,同样uint8、uint16、uint32和uint64对应四种无符号整数类型。有符原创 2020-11-17 13:07:25 · 476 阅读 · 0 评论 -
05-运算符
文章目录一 运算符1.1 运算符汇总1.2 自增、自减1.3 位运算二 优先级三 进制转换1.1 常见进制1.2 任意进制转换为十进制1.3 十进制转其他进制1.4 其他进制互转四 计算机运算原理一 运算符1.1 运算符汇总算术运算符: + - * / % ++ -- 关系运算符: == != <= >= < > 逻辑运算符: ! && ||位运算: &(按位与) |(按位或) ^(按位取反) <<(左移) >>(右移)原创 2020-11-17 13:04:38 · 156 阅读 · 1 评论 -
04-流程控制
文章目录一 流程控制之-条件语句1.1 判断语句 if1.2 分支语句 switch二 流程控制之-循环语句2.1 for循环2.2 跳出循环一 流程控制之-条件语句1.1 判断语句 ifif判断示例:// 初始化与判断写在一起: if a := 10; a == 10if i == '3' { }if的特殊写法:if err := Connect(); err != nil { // 这里的 err!=nil 才是真正的if判断表达式}1.2 分支语句 swit原创 2020-11-17 13:01:35 · 151 阅读 · 0 评论 -
03-数据类型
文章目录一 数据类型分类二 零值机制三 格式化输出一 数据类型分类值类型:基本数据类型是Go语言实际的原子,复合数据类型是由不同的方式组合基本类型构造出来的数据类型,如:数组,slice,map,结构体整型 int8,uint # 基础类型之数字类型浮点型 float32,float64 # 基础类型之数字类型复数 # 基础类型之数字类型布尔型 bool原创 2020-11-17 13:00:35 · 162 阅读 · 1 评论 -
02-标识符与变量
文章目录一 标识符1.1 关键字1.2 保留字二 变量2.1 变量声明2.2 多变量声明2.3 变量值互换2.4 _丢弃变量2.5 := 声明的注意事项2.6 多数据分组书写三 关键字iota一 标识符1.1 关键字Go现在拥有25个关键字:if for func case struct import go type chan defer default packagemap原创 2020-11-17 12:59:02 · 252 阅读 · 1 评论 -
01-Go简介
文章目录一 Go语言介绍二 Go安装三 HelloWorld四 Go语法注意五 开发工具推荐一 Go语言介绍Go语言是Google公司开发的一种静态、编译型语言,具备自动垃圾回收功能,原生支持并发开发。Go的诞生是为了解决当下编程语言对并发支持不友好、编译速度慢、编程复杂这三个主要问题。Go既拥有接近静态编译语言(如C)的安全和性能,又有接近脚本语言(如python)的开发效率,其主要特点有:天然并发:语言层面支持并发,包括gorotuine、channel语法优势:没有历史包袱,包含多返回值原创 2020-11-17 12:57:35 · 343 阅读 · 1 评论