08 2019 档案
摘要:文件,对我们并不陌生,文件是数据源(保存数据的地方)的一种,比如大家经常使用的Word文档,txt文件,excel文件...都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保存视频,声音... 文件在程序中是以流的形式来操作的。 流:数据在数据源(文件)和程序(内存)之间经历的路
阅读全文
摘要:多态及体现: 基本介绍: 变量(实例)具有多种形态。面向对象的第三大特征,在Go语言,多态特征是通过接口实现的。可以按照统一的接口来调用不同的实现。这时接口变量就呈现不同的形态。 快速入门: 在前面的Usb接口案例, Usb usb,既可以接收手机变量,又可以接收相机变量,就体现了Usb 接口多态特
阅读全文
摘要:接口编程的经典案例: 接口最佳实践: 实现对Hero 结构体切片的排序:sort.Sort(data Interface) 案例演示: package mainimport ( "fmt" "sort" "math/rand") //1.声明Hero结构体type Hero struct { Nam
阅读全文
摘要:Go接口注意事项和细节说明: 注意事项和细节: 1)接口本身不能创建实例,但是可以指向一个实现了该接口的自定义类型的变量(实例) type AInterface interface { Say()} type Stu struct { Name string} func (stu Stu) Say(
阅读全文
摘要:接口(interface) 按顺序,我们应该讲解多态,但是在讲解多态前,我们需要讲解接口(interface) ,因为在Golang中 多态特性主要是通过接口来体现的。 接口快速入门: 这样的设计需求在Golang编程中也是会大量存在的,我曾经说过,一个程序就是一个世界,在现实世界存在的情况,在程序
阅读全文
摘要:多重继承介绍: 结构体的匿名字段是基本数据类型,如何访问,下面代码输出什么? 匿名字段练习: type Monster struct { Name string Age int} type A struct { Monster int //匿名字段是基本数据类型 n int} func main()
阅读全文
摘要:面向对象编程三大特性--继承 为什么需要继承: 一个小问题,看个学生考试系统的程序extends01.go,提出代码复用的问题: 代码: package mainimport ( "fmt") //编写一个学生考试系统 //小学生type Pupil struct { Name string Age
阅读全文
摘要:封装介绍: 封装(encapsulation) 就是把抽象出的字段和对字段的操作封装在一起,数据被保护在内部,程序的其它包只有通过被授权的操作(方法),才能对字段进行操作。 封装的理解和好处: 1)隐藏实现细节 2)提可以对数据进行验证,保证安全合理 type Person struct { Age
阅读全文
摘要:如何理解抽象: 我们在前面去定义一个结构体的时候,实际上就是把一类事物的共有的属性(字段)和行为(方法)提取出来,形成一个物理模型(模板)。这种研究问题的方法称为抽象。 案例演示: type Account struct { AccountNo string Pwd string Balance f
阅读全文
摘要:说明: Golang的结构体没有构造函数,通常可以使用工厂模式来解决这个问题。 看一个需求: 一个结构体的声明是这样的: package modeltype Student struct { Name string...} 因为这里的Student 的首字母S是大写的,如果我们想在其它包创建Stud
阅读全文
摘要:步骤: 1)声明(定义)结构体,确定结构体名2)编写结构体的字段3)编写结构体的方法 学生案例: 1)编写一个Student结构体,包含name、gender、age、id、score字段,分别为string、string、int、int、float64类型。 2)结构体中声明一个say方法,返回s
阅读全文
摘要:方法的调用和传参机制原理:(重要!) 说明:方法的调用和传参机制和函数基本一样,不一样的地方是方法调用时,会将调用方法的变量,当做实参也传递给方法。下面我们举例说明: 案例1:画出前面getSum 方法的执行过程+说明 说明: 1)在通过一个变量去调用方法时,其调用机制和函数一样。2)不一样的地方,
阅读全文
摘要:基本介绍: 在某些情况下,我们要需要声明(定义)方法。比如Person 结构体:除了有一些字段外(年龄,姓名...),Person结构体还有一些行为比如:可以说话、跑步...,通过学习,还可以做算术题。这时就要用方法才能完成。 Golang中的方法是作用在指定的数据类型上的(即:和指定的数据类型绑定
阅读全文
摘要:创建结构体变量和访问结构体字段 1)方式1-直接声明 案例演示:var person Person 2)方式2-{} 案例演示:var person Person = Person{} func main() { p2 := Person{} p2.Name = "tom" p2.Age = 18
阅读全文
摘要:Golang语言面向对象编程说明: 1)Golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说Golang支持面向对象编程特性是比较准确的。 2)Golang没有类(class),Go语言的结构体(struct)和其它编程语言的类(class)
阅读全文
摘要:map切片: 切片的数据类型如果是map,则我们称为 slice of map, map切片,这样使用则map个数就可以动态变化了。 案例演示:要求:会用一个map来记录monster的信息 name 和 age,也就是说一个monster 对应一个map,并且妖怪的个数可以动态的增加=>map切片
阅读全文
摘要:map增加和更新: map["key"] = value //如果key还没有,就是增加,如果key存在就是修改 案例演示: func main() { cities := make(map[string]string) cities["no1"] = "北京" cities["no2"] = "天
阅读全文
摘要:map是key-value数据结构,又称为字段或者关联数组。类似其他编程语言中的集合,在编程中是经常使用到。 map的声明: 基本语法: var map变量名 map[keytype]valuetype key 可以是什么类型? golang中的map,的key 可以是很多种类型,比如 bool,数
阅读全文
摘要:多维数组我们只介绍二维数组。 二维数组的应用场景: 比如我们开发一个五子棋游戏,棋盘就是需要二维数组来表示。 二维数组的使用: 快速入门案例:请用二维数组输出如下图形0 0 0 0 0 00 0 1 0 0 00 2 0 3 0 00 0 0 0 0 0 代码演示: func main() { //
阅读全文
摘要:在Golang中,我们常用的查找有两种: 1)顺序查找 2)二分查找 顺序查找: 1)有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王 猜数游戏:从键盘中任意输入一个名称,判断数列中是否包含此名称 案例演示:func main() { //思路 //1.定义一个字符串数组 //2.从控制台接收一个
阅读全文
摘要:排序是将一组数据,依指定的顺序进行排列的过程。 排序的分类: 1)内部排序: 指将需要处理的所有数据都加载到内部存储器中进行排序。 包括(交换式排序法、选择式排序法和插入式排序法); 2)外部排序法: 数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。 包括(合并排序法和直接合并排序法)
阅读全文
摘要:一.磁盘调度算法介绍 查看磁盘用的调度算法[root@localhost ~]# cat /sys/block/sda/queue/scheduler noop [deadline] cfq 1.CFQ CFQ把I/O的请求按照进程分别放入进程对应的队列中,所以A进程和B进程发出的I/O请求会在两个
阅读全文
摘要:安装iostatyum -y install sysstat 作用:iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不
阅读全文
摘要:索引好比书的目录。通过索引能快速的定位到一条数据。 在MySQL中除了B+树索引之外,还有一些其他的索引类型。比如:全文索引、(DB和DD索引叫R树索引)。在MySQL cluster中是P树索引,memory引擎中用的是哈希索引。Oracle中的位图索引在MySQL中是没有的。百分之九十五的时间在
阅读全文
摘要:Scala操作外部数据: 1、操作文件 2、操作XML 3、操作MySQL 读取文件: object FileApp { def main(args: Array[String]): Unit = { //system file val file = Source.fromFile("Users/r
阅读全文
摘要:隐式转换: implicit 目的:偷偷摸摸/隐式/悄无声息的对方法进行了增强 如何对一个已经存在的类添加一个新方法或者增强方法的功能 Java:动态代理 Scala:隐式转换 双刃剑:有好有坏,看你自己怎么使用了。 案例1: object ImplicitApp extends App { //定
阅读全文
摘要:字符串高级操作:***** 非常重要 将函数赋值给变量/值def sayHello(name:String): Unit = { println(s"Hello:$name")} object StringApp extends App { val s = "Hello:PK" val name =
阅读全文
摘要:切片的遍历: 切片的遍历和数组一样,也有两种方式 1)for 循环常规方式遍历 2)for-range 结构遍历切片 两种方式都在下面的代码里: 案例演示: func main() { //使用常规的for循环遍历切片 var arr [5]int = [...]int{10,20,30,40,50
阅读全文
摘要:数组复杂使用--数组反转 要求:随机生成五个数,并将其反转打印 通过找规律反转 package mainimport ( "fmt" "math/rand" "time") func main() { //思路 //1.随机生成五个数, rand.Intn() 函数 //2.当我们得到随机数后,就放
阅读全文
摘要:数组的遍历: 方式1-常规遍历: 前面已经讲过了,不在赘述。 方式2-for-range结构遍历 这是Go语言一种独有的结构,可以用来遍历访问数组的元素 基本语法:for inde, value := range array01 { ...} 说明: 1)第一个返回值 index 是数组的下标 2)
阅读全文
摘要:为什么需要数组? 问题: 一个养鸡场有6只鸡,它们的体重分别是3kg, 5kg, 1kg, 3.4kg, 2kg, 50kg。请问这六只鸡的总体重是多少?平均体重是多少?请你编写一个程序。 使用传统方法解决。 func main() { //分析思路:定义六个变量,分别表示六只鸡的,然后求出和,然后
阅读全文
摘要:错误处理机制: 先看一段代码:看看输出什么? package mainimport "fmt" func test() { num1 := 10 num2 := 0 res := num1 / num2 fmt.Println("res=",res)} func main() { test() fm
阅读全文
摘要:Golang设计者为了编程方便,提供了一些函数,这些函数可以直接使用,我们称为Go的内置函数。文档:https://studygolang.com/pkgdoc -> builtin 1)len:用来求长度,比如string、array、slice、map、channel 2)new:用来分配内存,
阅读全文
摘要:在编程中,程序员会经常使用到日期相关的函数,比如:统计某段代码执行话费的时间等等。 1)时间和日期相关函数,需要导入time包 2)time.Time 类型,用于表示时间 3)获取到当前时间的方法:now := time.Now() //now 的类型就是time.Time func main()
阅读全文
摘要:字符串中常用的函数: 字符串在我们程序开发中,使用的非常多的,常用的函数我们需要掌握: 1)统计字符串的长度,按字节len(str) func main() { //golang的编码统一为UTF-8的(ascii码的字符(数字和字母) 占一个字节,汉字占用3个字节 ) str := "hello北
阅读全文
摘要:函数参数的传递方式: 基本介绍: 我们在讲解函数注意事项和使用细节时,已经讲过值类型和引用类型了,这里我们在系统总结一下,因为这是重难点,值类型参数默认就是值传递,而引用类型参数默认就是引用传递。 两种传递方式: 1)值传递 2)引用传递 其实,不管是值传递还是引用传递,传递给函数的都是变量的副本,
阅读全文
摘要:为什么需要defer? 在函数中,程序员经常需要创建资源(比如:数据库连接、文件句柄、锁等),为了在函数执行完毕后,及时的释放资源,Go的设计者提供defer (延时机制)。 快速入门案例: func sum(n1 int, n2 int) int { //当执行到defer时,暂时不执行,会将de
阅读全文
摘要:基本介绍: 闭包就是一个函数和与其相关的引用环境组合的一个整体(实体) 案例演示: package mainimport ( "fmt") //累加器func AddUpper() func (int) int { var n int = 10 return func (x int) int { n
阅读全文
摘要:init函数: 基本介绍: 每一个源文件都可以包含一个init函数,该函数会在main函数执行前,被Go运行框架调用,也就是说init会在main函数前被调用。 案例说明: //init函数,通常可以在init函数中完成初始化工作func init() { fmt.Println("init()..
阅读全文
摘要:模式匹配 Java:switch case 值 对一个值进行条件判断,返回针对不同的条件进行不同的处理 Scala:match case 值/类型/集合 基本语法:变量 match { case value1 => 代码1 case value2 => 代码2 ..... case _ => 代码N
阅读全文
摘要:Array: 定长数组 变长数组 +=/++=/insert 定长数组:object ArrayApp extends App{ val a = new Array[string](5) a.length //查看数组长度 a(1) = "hello" //赋值,下标从0开始 val b = Arr
阅读全文
摘要:面向对象编程OOP: Scala vs Java 都有这三特性 封装:把属性、方法封装到类中 Person: int id, String name, Date birthday.... 需要getter/setter eat、sleep.... 继承:父类和子类之间的关系 override重写 U
阅读全文
摘要:函数/方法的定义 def function_name(x:Int, y:Int):Int = { // 括号内的叫做方法体 //Java: return ""; //Scala: 方法体的最后一行作为返回值,不需要return} 例子:def add(x:Int, y:Int):Int = { x
阅读全文
摘要:为什么要学习Scala 为了更好的掌握Spark!!! 优雅:API 开发速度快: 整合: 值和变量 val: final 赋值以后不能改变的,相当于java的final val 值名称:类型 = xxx val name:String = "Arsenal" //不可修改var: var 变量名称
阅读全文
摘要:1)函数的形参列表可以是多个,返回值列表也可以是多个。 2)形参列表和返回值列表的数据类型可以是值类型和引用类型 3)函数的命名遵循标识符命名规范,首字母不能是数字,首字母大写该函数可以被本报文件和其它包文件使用,类似public,首字母小写,只能被本包使用,其它包文件不能使用,类似private
阅读全文
摘要:基本介绍: 一个函数在函数体内又调用了本身,我们称为递归调用 代码1: package main import ( "fmt") func test(n int) { if n > 2 { n-- test(n) } fmt.Println("n=", n)} func main() { test(
阅读全文
摘要:为了让大家更好的理解函数调用过程,看两个案例,并画出示意图,这个很重要。1)传入一个数+1 test 对上图说明: (1)在调用一个函数时,会给该函数分配一个新的空间,编译器会通过自身的处理,让这个新的空间和其它栈的空间区分开来。 (2)在每个函数对应的栈中,数据空间是独立的,不会混淆。 (3)当一
阅读全文
摘要:为完成某一功能的程序指令(语句)的集合,称为函数。在Go中,函数分为:自定义函数、系统函数(查看Go编程手册) 基本语法: func 函数名 (形参列表) (返回值类型列表) { 执行语句... return 返回值列表} 1)形参列表:表示函数的输入2)函数中的语句:表示为了实现某一功能代码块3)
阅读全文
摘要:break: 案例: package main import ( "fmt" "math/rand" "time") func main() { //我们为了生成一个随机数,还需要个rand设置一个种子。 //time.Now().Unix() : 返回一个从1970:01:01 的0时0分0秒到现
阅读全文
摘要:多重循环控制 介绍: 1)将一个循环放在另一个循环体内,就形成了嵌套循环。在外边的for循环称为外层循环,在里面的for循环称为内层循环。【建议一般使用2层,最多不要超过3层】 2)实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可
阅读全文
摘要:for 循环 func main() { //输出10句 “您好,尚硅谷” for i := 1; i <=10; i++ { fmt.Println("您好,尚硅谷") }} 基本语法: for循环变量初始化;循环条件;循环变量迭代 { 循环操作(语句)} 对上面的语法格式说明:1)对for循环来
阅读全文
摘要:switch分支结构: 1)switch语句用于基本不同条件执行不同动作,每一个 case分支都是唯一的,从上到下逐一测试,直到匹配为止。2)匹配项后面也不需要在加break 基本语法: swith 表达式 { case 表达式1,表达式2,...: 语句块1 case 表达式3,表达式4,...
阅读全文
摘要:在程序中,程序运行的流程控制决定程序是如何执行的,是我们必须掌握的,主要有三大流程控制语句。 1)顺序控制2)分支控制3)循环控制 顺序控制介绍: 程序从上到下逐行地执行,中间没有任何判断和跳转。 顺序控制举例和注意事项: Golang中定义变量时采用合法的前向引用。如: func main() {
阅读全文
摘要:对于整数,有四种表示方式: 1) 二进制: 0, 1, 满2进1。 在golang中,不能直接使用二进制来表示一个整数,它沿用了C 的特点。 2) 十进制: 0 - 9,满10进1。 3) 八进制: 0 - 7,满8进1。以数字0开头表示。 4) 十六进制: 0 - 9及A - F,满16进1。以0
阅读全文
摘要:在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。InputDemo.go 步骤:1)导入fmt包2)调用fmt包的 ftm.Scanln() 或者 fmt.Scanf() 案例演示要求:可以从控制台接收用户信息,【姓名,年龄,薪水】。1)使用fmt.Scanln() 获取2)使用fm
阅读全文
摘要:举例说明: package main import "fmt" func main() { //演示一把 & 和 * 的使用 a := 100 fmt.Println("a 的地址=", &a) var ptr *int = &a fmt.Println("ptr 指向的值是=", *ptr)} 特
阅读全文
摘要:位运算的思考题: 1)请看下面的代码段,回答a,b,c,d结果是多少? func main() { var a int = 1 >> 2 var b int = -1 >> 2 var c int = 1 << 2 var d int = -1 << 2 //a,b,c,d结果是多少 fmt.Pri
阅读全文
摘要:赋值运算符就是将某个运算后的值,赋给指定的变量。 案例演示: 案例演示赋值运算符的基本使用。1)赋值基本案例 //赋值运算符的使用演示 //var i int //i = 10 //基本赋值2)有两个变量, a和b,要求将其进行交换,最终打印结果 func main() { //有两个变量, a和b
阅读全文
摘要:用于连接多个条件(一般来讲就是关系表达式),最终的结果也是一个bool值。 func main() { //演示逻辑运算符的使用 && var age int = 40 if age > 30 && age < 50 { fmt.Println("OK1") //结果是true,输出。 } if a
阅读全文
摘要:1)关系运算符的结果都是bool型,也就是要么是true,要么是false 2)关系表达式经常用在 if 结构的条件中或循环结构的条件中 func main() { var n1 int = 9 var n2 int = 8 fmt.Println(n1 == n2) //false fmt.Pri
阅读全文
摘要:算数运算符是对数值类型的变量进行运算的,比如:加减乘除。在Go程序中使用的非常多。 加、减、乘 这三个使用的方法没什么特别要注意的地方。 除法的使用: func main() { fmt.Println(10 / 4) //2 因为两头运算的都是整数,那么除后就去掉小数部分,保留整数部分 var n
阅读全文
摘要:常量介绍: • 常量使用const 修改• 常量在定义的时候,必须初始化• 常量不能修改• 常量只能修饰bool、数值类型(int,float系列)、string 类型• 语法:const identifier [type] = value• 举例说明,看看下面的写法是否正确: const name
阅读全文
摘要:标识符概念 1)golang 对各种变量、方法、函数等命名时使用的字符序列(就是个字符串)称为标识符2)凡是自己可以起名字的地方都叫标识符 标识符的命名规则 1)由26个英文字母大小写,0-9,_ 组成 2)数字不可以开头。 var num int //OK var 3num int //error
阅读全文
摘要:常见的值类型和引用类型 1)值类型:基本数据类型int 系列,float系列,bool,string、数组和结构体struct 2) 引用类型:指针、slice切片、map、管道chan、interface 等都是引用类型 值类型和引用类型使用特点: 1)值类型:变量直接存储值,内存通常在栈中分配
阅读全文
摘要:基本介绍 1)基本数据类型,变量存的就是值,也叫值类型2)获取变量的地址,用&,比如:var num int , 获取num的地址:&num [root@node3 shangxuetang]# cat pointer.go package main import "fmt" func main()
阅读全文
摘要:基本数据类型转string类型: 方式1:fmt.Sprintf("%参数", 表达式) 【个人习惯这个,灵活】 函数的介绍: func Sprintf func Sprintf(format string, a ...interface{}) string Sprintf根据format参数生成格
阅读全文
摘要:默认值: 整型的默认值:0 浮点型的默认值:0字符串的默认值:"" //空布尔类型的默认值:false package mainimport "fmt" func main() { var a int //0 var b float32 //%f的输出是0.000000,%v的输出是0 var c
阅读全文
摘要:基本案例: [root@node3 shangxuetang]# cat string.go package main import "fmt" func main() { //string的基本使用 var address string = "北京长城 110 hello world!" fmt.
阅读全文
摘要:1)布尔类型也叫 bool类型,bool类型数据只允许取值true或false2)bool类型占1个字节。3)bool类型适于逻辑运算,一般用于程序流程控制4)不可以0或非0的整数替代false和true,这点和C语言不同 [root@node3 shangxuetang]# cat bool.go
阅读全文
摘要:字符类型使用细节 1)字符常量是用单引号('')括起来的单个字符。例如:var c1 byte = 'a' var c2 int = '中' var c3 byte = '9' 2) Go中允许使用转义字符'\' 来将其后的字符转变为特殊字符型常量。例如: var c3 char = '\n' //
阅读全文
摘要:[root@node3 shangxuetang]# cat float.go package main import "fmt" //演示golang中小数类型使用func main() { var price float32 = 89.12 fmt.Println("price=", price
阅读全文
摘要:数据类型: 整数 : int, int32, int64, uint, uint32, uint64 字符串 : string 布尔:bool 浮点:float32 float64 uint 表示无符号整数类型。 [root@node2 xiaochun]# cat int.go package m
阅读全文
摘要:下载地址(官网):https://golang.org/dl/ 下载地址(国内):https://dl.gocn.io/ 想编译GO,必须先有一个GO的编译器。 创建GO的编译器:[root@node2 ~]# mkdir local[root@node2 ~]# cd local[root@nod
阅读全文
摘要:GO语言是Google于2009年推出的一门新的系统编程语言 特点: 静态编译 垃圾回收 简洁的符号和语法 平坦的类型系统 基于CSP的并发模型 高效简单的工具链 丰富的标准库 为什么选择go语言 编译型语言,运行速度快 静态编译没有依赖 天生支持并发,充分利用多核 大厂支持,有后台 Hello W
阅读全文
摘要:一、MySQL官方网站介绍 1.Developer Zone : MySQL开发工程师板块 Articles : Oracle工程师自己的博客 Plant MySQL : 和MySQL相关从业人员的博客 Bugs : MySQL BugList Worklog : 开发记录 Labs : MySQL
阅读全文