Golang入门笔记
尚硅谷韩顺平笔记心得
风落不归处
这个作者很懒,什么都没留下…
展开
-
21.go之sqlx事务操作
package mainimport ( "errors" "fmt" _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx" "time")var db *sqlx.DBfunc initDB()(err error) { dsn := "root:root@tcp(127.0.0.1:13306)/go_test?charset=utf8mb4&parseTime=True" // 也可以使用MustC.原创 2021-12-31 13:48:57 · 1907 阅读 · 0 评论 -
21.go之sqlx操作MYSQL数据库
package mainimport ( "fmt" _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx" "time")var db *sqlx.DBfunc initDB()(err error) { dsn := "root:root@tcp(127.0.0.1:13306)/go_test?charset=utf8mb4&parseTime=True" //也可以使用MustConnect连接不成功就.原创 2021-12-30 22:26:55 · 295 阅读 · 0 评论 -
21. go之sqlx连接MYSQL数据库
package sqlx_connectimport ( "fmt" _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx" "time")var db *sqlx.DBfunc initDB()(err error) { dsn := "root:root@tcp(127.0.0.1:13306)/go_test?charset=utf8mb4&parseTime=True" //也可以使用MustConne.原创 2021-12-30 19:01:16 · 519 阅读 · 0 评论 -
20.GO实现MYSQL事务
转载李文周Go语言操作MySQL | 李文周的博客 (liwenzhou.com)转载 2021-12-30 17:11:31 · 286 阅读 · 0 评论 -
20. go之sql预处理使用及SQL注入问题
1. 使用场景:批量执行sql语句,可以提高查询速度package mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql""time")var db *sql.DBfunc initMySQL()(err error){ dsn := "root:root@tcp(127.0.0.1:13306)/go_test" //去初始化全局的db对象,而不是新声明一个变量 db,err = sql.Open.原创 2021-12-30 15:07:16 · 1764 阅读 · 0 评论 -
20. golang之sql操作mysql
package mainimport ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" "time")var db *sql.DBfunc initMySQL()(err error){ dsn := "root:root@tcp(127.0.0.1:13306)/go_test" //去初始化全局的db对象,而不是新声明一个变量 db,err = sql.Open("mysql",dsn) if err != n.原创 2021-12-30 14:52:00 · 615 阅读 · 0 评论 -
20. go之sql连接mysql
package mainimport ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" // 匿名导入,会自动执行mysql驱动中的init方法)func main() { // DSN:Data Source Name dsn := "root:root@tcp(127.0.0.1:3306)/sql_demo" db, err := sql.Open("mysql",dsn) if err != nil .原创 2021-12-30 12:27:05 · 456 阅读 · 0 评论 -
1. Golang操作Redis库
1. 安装第三方开源Redis库1)使用第三方开源的Redis库:github.com/garyburd/redigo/redis2)在使用Redis前,先安装第三方Redis库,在GOPATH路径下执行安装指令:GOPATH>go get github.com/garyburd/redigo/redis3)安装成功后,可以看到如下包...原创 2021-08-24 20:47:44 · 689 阅读 · 0 评论 -
19. Redis的使用
1. Redis的基本介绍1. Redis 是NoSQL数据库,不是传统的关系型数据库官网:https://redis.io/ 和 http://www.redis.cn/2. Redis: REmote Dictionary Server(远程字典服务器)。Redis性能非常高,单机能够达到15w qps,通常适合做缓存,也可以做持久化3.是完全开源免费的,高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是最热门的NoSQL数据库之一,也称为数原创 2021-08-23 21:55:04 · 593 阅读 · 2 评论 -
18.golang之TCP编程
1. 网络编程基本介绍 Golang的主要设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端,程序必不可少也是至关重要的一部分。网络编程有两种:1)TCP socket编程,是网络编程的主流。之所以叫Tcp socket编程,是因为底层是基于Tcp/ip协议的,比如:QQ聊天【示意图】2)b/s结构的http编程,我们使用浏览器去访问服务器时,使用的就是http协议,而http底层依旧是用tcp socket实现的。【示意图】 比如:京东商城【这属于 go web开发范畴】..原创 2021-08-22 22:31:19 · 922 阅读 · 2 评论 -
17.golang之反射课堂练习和反射的最佳实际
1. 课堂练习1)给你一个变量 var v float64 = 1.2,请使用反射来得到它的reflect.Value,然后获取对应的Type,Kind和值,并将reflect.Value转换成interface{},再将interface{}转换成float642)看段代码,判断是否正确,为什么?package mainimport ( "fmt" "reflect")func main() { var str string = "tom" //原创 2021-08-21 14:47:13 · 175 阅读 · 0 评论 -
17.golang之反射的注意事项
1. 反射的注意事项和细节1)reflect.Value.Kind, 获取变量的类别,返回的是一个常量2)Type和Kind的区别Type是类型,Kind是类别,Type和Kind 可能是相同的,也可能是不同的比如:var num int = 10 num的Type是int,Kind也是int比如: var stu Student stu的Type是pkg1.Student,Kind是struct3)通过反射可以让变量在interface{}和Reflect.Va...原创 2021-08-20 21:41:46 · 145 阅读 · 0 评论 -
17.golang之反射快速入门
1. 先看一个问题来引出反射package mainimport ( "fmt" "encoding/json")// 先看一个问题,引出反射的使用场景type Monster struct { Name string `json: "monsterName"` Age int `json: "monsterAge"` Sal float64 `json: "monsterSal"` Sex string `json: "monsterSex"`}func main()原创 2021-08-20 17:29:18 · 143 阅读 · 0 评论 -
16.golang之channel注意细节(只读、只写、select、recover)
1)channel可以声明为只读,或只写性质案例如下:package mainimport ( _"fmt")func main() { // 管道可以声明为只读或者只写 // 1. 在默认情况下,管道是双向的 // var chan1 chan int // 可读可写 // 2. 声明为只写 var chan2 chan<- int chan2 = make(chan int,3) chan2<- 20 // num := <- chan2 .原创 2021-08-20 14:12:14 · 2046 阅读 · 0 评论 -
16. golang之利用channel和goroutine完成统计素数
1. 需求要求统计1-200000的数字中,哪些是素数?这个问题在本章开篇就提出来了,可以使用goroutine和channel来完成2.分析思路传统的方法,就是使用一个循环,循环的判断各个数是不是素数【ok】使用并发/并行的方式,将统计素数的任务分配给多个(x个)goroutine去完成,完成任务时间短分析思路图:代码实现:package mainimport ( "fmt" "time")// 需求:// 要求统计1-200000的数字,哪些是素数?这..原创 2021-08-20 10:41:13 · 349 阅读 · 0 评论 -
16. golang之channel的关闭和遍历
1. channel的关闭使用内置函数close可以关闭channel,当channel关闭后,就不能再向channel写数据了,但是仍然可以从该channel读取数据案例演示:package mainimport ( "fmt")func main() { intChan := make(chan int, 3) intChan <- 100 intChan <- 200 close(intChan) // close // 这时不能够再向channel写原创 2021-08-19 22:46:54 · 1570 阅读 · 0 评论 -
16.golang之channel (管道)
1. channel(管道)——看个需求1)需求:现在需要计算 1-200 的各个数的阶乘,并且把各个数的阶乘放到map中。最后显示出来。要求使用goroutine完成。2)分析思路使用goroutine来完成,效率高,但是会出现并发/并行安全问题这里就提出了不同goroutine如何通信的问题代码实现:1)使用goroutine来完成(看看使用goroutine并发完成会出现什么问题?然后我们去解决)2)在运行某个程序时,如何知道是否存在资源竞争问题。方法很简单,在编原创 2021-08-19 21:48:03 · 989 阅读 · 0 评论 -
15. golang之单元测试
1. 先看一个需求在我们的工作中,会遇到这样的情况,就是去确认一个函数,或者一个模块的结果是否正确。如:2. 传统的方法1)传统的方法来进行测试在main函数中,调用addUpper函数,看看实际输出的结果是否和预期的结果一致,如果一致,则说明函数正确,否则函数有错误,然后修改错误代码实现:package mainimport ( "fmt")func addUpper(n int) int { res := 0 for i := 1; i <.原创 2021-08-18 21:47:51 · 529 阅读 · 0 评论 -
14. golang之 JSON基本介绍
1. 概述JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。key-valJSON是在2001年开始推广使用的数据格式,目前已经称为主流的数据格式。JSON易于机器解析和生成,并有效地提升网络传输效率,通常程序在网络传输时会先将数据(结构体、map等)序列化成JSON字符串,到接收方得到JSON字符串时,再反序列化恢复成原来的数据类型(结构体、map等)。这种方式已然成为各个语言的标准。2. 应用场景(原创 2021-08-18 19:30:48 · 554 阅读 · 2 评论 -
14.golang之读取文件操作应用实例
1)读取文件的内容并显示在终端(带缓冲区的方式),使用os.Open,filt.Close,bufio,NewReader(),reader.ReadString 函数和方法package mainimport ( "fmt" "os" "io" "bufio")func main() { // 打开文件 // 概念说明:file 的叫法 // 1. file 叫 file对象 // 2. file 叫 file指针 // 3. file 叫 file文件句柄 file,.原创 2021-08-16 23:37:11 · 303 阅读 · 0 评论 -
14. golang之打开文件和关闭文件
1. 使用的函数和方法2. 案例演示package mainimport ( "fmt" "os")func main() { // 打开一个文件 // 1. file 叫 file对象 // 2. file 叫 file指针(确实是一个指针) // 3. file 叫 file文件句柄 file, err := os.Open("F:/go_file/test.txt") if err != nil { fmt.Println("open file err.原创 2021-08-16 23:10:32 · 770 阅读 · 0 评论 -
14. golang之文件的基本介绍
1. 文件的基本介绍1)文件的概念 文件,对我们并不陌生,文件是数据源(保存数据的地方)的一种,比如大家经常使用的word文档,txt文件,excel文件...都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保存视频,声音...2)输入流和输出流总结:后面我们操作文件,会经常使用到os.File结构体...原创 2021-08-16 22:49:31 · 85 阅读 · 0 评论 -
11. golang之类型断言的最佳实践
1.类型断言的最佳实践1——在前面的Usb接口案例做改进:给Phone结构体增加一个特有的方法call(),当Usb接口接收的是Phone变量时,还需要调用call方法。代码如下:package mainimport ( "fmt")// 1. 在前面的Usb接口案例做改进// 给Phone结构体增加一个特有的方法call(),当Usb接口接收的是Phone变量时,还需要调用call方法// 声明 / 定义type Usb interface { // 声明了两个没有.原创 2021-08-14 16:45:22 · 211 阅读 · 0 评论 -
11. golang之类型断言
1. 由一个具体的需要,引出类型断言package mainimport ( "fmt")// 需求:如何将一个接口变量,赋值给自定义类型的变量 => 引出类型断言type Point struct { x int y int}func main() { // 空接口,也可以叫做Any var a interface{} var point Point = Point{1, 2} a = point //ok var b Point // 直接将b赋值a.原创 2021-08-14 15:29:00 · 251 阅读 · 0 评论 -
11. 面向对象编程-多态
1. 基本介绍变量(实例)具有多种形态。面向对象的第三大特征,在Go语言,多态特征是通过接口实现的。可以按照统一的接口来调用不同的实现,这时,接口变量就呈现不同的形态。举个例子:比如买票这个行为,当普通人买票时是全价买票;学生买票时时半价买票;军人买票时是优先买票多态是指在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。2. 快速入门在前面的Usb接口案例,Usb usb,既可以原创 2021-08-14 14:35:29 · 199 阅读 · 0 评论 -
11. 实现接口 VS 继承
1.实现接口和继承他们究竟有什么区别呢代码说明:package mainimport ( "fmt")// Monkey结构体type Monkey struct { Name string}// 声明接口type BirdAble interface { Flying()}type FishAble interface { Swimming()}func (this *Monkey) climbing() { fmt.Println(this...原创 2021-08-14 14:11:47 · 116 阅读 · 0 评论 -
11. 接口编程的最佳实践
1. 实现对Hero结构体切片的排序:sort.Sort(data Interface)package mainimport ( "fmt" "sort" "math/rand")// 实现对Hero结构体切片的排序:sort.Sort(data Interface)// 1. 声明Hero结构体type Hero struct { Name string Age int}// 2. 声明一个Hero结构体切片类型type HeroSlice []Hero// 3.原创 2021-08-14 13:54:08 · 61 阅读 · 0 评论 -
11. 接口的课堂练习
1. 下面的代码有没有什么错误,你能得出什么结论?原创 2021-08-13 22:14:26 · 105 阅读 · 0 评论 -
11. 接口
1. 接口的基本介绍按顺序,应该讲解多态,但是在讲解多态前,我们需要讲解接口(interface),因为在Golang中,多态的特性主要是通过接口来体现的。2. 为什么有接口3. 接口快速入门这样的设计需求在Golang编程中也是大量存在的,一个程序就是一个世界,在现实世界存在的情况下,在程序中也会出现。我们用程序来模拟一下前面的应用场景。package mainimport ( "fmt")// 声明/定义一个接口type Usb interface { .原创 2021-08-13 22:03:35 · 80 阅读 · 0 评论 -
11. 面向对象编程——多重继承
1. 多重继承说明如果一个struct嵌套了多个匿名结构体,那么该结构体可以直接访问嵌套的匿名结构体的字段和方法,从而实现了多重继承。案例演示:通过一个案例来说明多重继承的使用package mainimport ( "fmt")type Goods struct { Name string Price float64}type Brand struct { Name string Address string}type TV struct { Go原创 2021-08-12 21:34:42 · 180 阅读 · 0 评论 -
11. 面向对象编程——继承之结构体的匿名字段为基本数据类型
课堂练习结构体的匿名字段是基本数据类型,如何访问,下面代码输出什么package mainimport ( "fmt")type Monster struct { Name string Age int}type E struct { Monster int // 嵌入的匿名字段为基本数据类型 n int}func main() { var e E e.Monster.Name = "牛魔王" e.Monster.Age = 100 e.int = 20原创 2021-08-12 21:26:12 · 83 阅读 · 0 评论 -
11. 面向对象编程——继承
1. 看一个问题,引出继承的必要性一个小问题,看个学生考试系统的程序 extends01.go,提出代码复用的问题package mainimport ( "fmt")// 编写一个学生考试系统// 小学生type Pupil struct { Name string Age int Score int}// 显示他的成绩func (p *Pupil) ShowInfo() { fmt.Printf("学生名=%v 年龄=%v 成绩=%v \n",p.原创 2021-08-12 21:15:56 · 173 阅读 · 1 评论 -
11.面向对象编程思想——抽象
1. 如何理解抽象我们在前面去定义一个结构体时,实际上就是把一类事物的共有的属性(字段)和行为(方法)提取出来,形成一个物理模型(模板)。这种研究问题的方法称为抽象。package mainimport ( "fmt")// 定义一个结构体Accounttype Account struct { AccountNo string Pwd string Balance float64}// 方法// 1. 存款func (account *Account) D.原创 2021-08-11 23:19:39 · 341 阅读 · 0 评论 -
10.工厂函数
1. 说明Golang的结构体没有构造函数,通常可以使用工厂模式来解决这个问题。看一个需求一个结构体的声明是这样的:package modeltype Student struct {Name string...}因为这里的Student的首字母S是大写的,如果我们想在其它包创建Student的实例(比如main包),引入model包后,就可以直接创建Student结构体的变量(实例),但是问题来了,如果首字母是小写的,比如:是 type student...原创 2021-08-11 00:04:29 · 123 阅读 · 0 评论 -
10. 创建结构体变量时指定字段值
1. 说明Golang在创建结构体实例(变量)时,可以直接指定字段的值创建结构体变量时指定字段值的方式1)方式12)方式2原创 2021-08-10 22:26:25 · 79 阅读 · 0 评论 -
10. 面向对象编程应用实例
1. 步骤1)声明(定义)结构体,确定结构名2)编写结构体的字段3)编写结构体的方法2. 学生案例1)编写一个Student结构体,包含name、gender、age、id、score字段,分别为string、string、int、int、float64类型。2)结构体中声明一个say方法,返回string类型,方法返回信息中包含所有字段值3)在main方法中,创建Student结构体实例(变量),并访问say方法,并将调用结果打印输出。package maini原创 2021-08-10 22:15:45 · 904 阅读 · 0 评论 -
10.golang之方法和函数的区别
原创 2021-08-09 23:11:13 · 133 阅读 · 0 评论 -
10. golang之面向对象编程(上)
1. 解决养猫问题,引出结构体前的demo看一个问题:张老太养了两只猫猫:一只名字叫小白,今年3岁,白色。还有一只叫小花,今年100岁,花色。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色。如果用户输入的小猫名错误,则显示张老太没有这只猫。 使用现有技术解决以上问题,如下代码:package mainimport ( "fmt")func main() { // 问题: // 张老太养了两只猫猫:一只名字叫小白,今年3...原创 2021-08-07 21:10:11 · 134 阅读 · 0 评论 -
9.golang之map的课堂练习题
说明:1)使用map[string]map[string]string的map类型2)key:表示用户名,是唯一的,不可以重复3)如果某个用户名存在,就将其密码修改"888888",如果不存在就增加这个用户信息(包括昵称nickname和密码pwd)4)编写一个函数modifyUser(users map[string]map[string]string, name string)完成上述功能* 代码实现package mainimport ( "fmt")// 说明:原创 2021-08-07 14:12:14 · 201 阅读 · 0 评论 -
10.golang之map
1. map的基本介绍map是key-value数据结构,又称为字段或者关联数组。类似其它编程语言的集合,在编程中是经常使用到的2. map的声明1)基本语法var map 变量名 map[keytype]valuetype* key可以是什么类型golang中的map的key可以是很多种类型,比如bool,数字,string,指针,channel,还可以是只包含前面几个类型的接口,结构体,数组通常key为int、string注意:slice,map还有function不可以原创 2021-08-07 13:46:10 · 518 阅读 · 0 评论