
Go 入门教程
Go 入门教程,
通过实际的例子学习,
每一句话都有对应注释,
快速扫过go的基础知识点,
之后就可以直接从项目实战中来学习了。
vtenten
代码搬运工
-
原创 Go 结构体struct、字典map 与 json的相互转换
编码结构体 -> json// 结构体 -> jsonpackage mainimport ( "encoding/json" "fmt")// 结构体 -> jsontype IT struct { Company string Subjects []string IsOk bool Price float64}func main() { t1 := IT{"lianshi",[]string{"Go","Python","Java"2020-06-12 17:16:20378
0
-
原创 Go grpc依赖配置
# go mod init# go env -w GO111MODULE=on# go env -w GOPROXY=https://goproxy.cn,direct# 1. 安装 grpcgo get -u google.golang.org/grpc# 2. 安装protoc工具(windows版)下载windows版,将bin目录加入到环境变量https://github.com/google/protobuf/releasesprotoc 验证# 3. 安装契约工具go2020-06-08 22:59:16170
0
-
原创 Go Redis
Go RedisGo语言连接Redis库,常用的库 redisgo 和 go-redishttps://github.com/gomodule/redigohttps://github.com/go-redis/redis新项目更建议直接使用go-redis,它对集群和哨兵模式支持更好gormhttp://gorm.book.jasperxu.com/crud.html#credigo 基本使用# 安装redigogo get github.com/gomodule/redigo/redi2020-05-20 22:13:14117
0
-
原创 Go 练习02.操作MySQL
database/sql 包提供了保证SQL数据库的接口,并不提供数据库驱动。需要自行下载数据库驱动。数据库驱动$ go get -u github.com/go-sql-driver/mysql连接数据库sql.Open(“mysql”,“root:123456@(127.0.0.1:3306)/test”)package mainimport ( "fmt...2020-05-04 18:34:21149
0
-
原创 Go 练习01.统计文本行出现频次/查找重复的行
从标准输入读取文本,统计相同文本出现的次数package mainimport ( "bufio" "fmt" "os")func main() { // 统计文本 {"文本1":5 } 即`文本1`出现5次 counts := make(map[string]int) // os.Stdin 是标准输入, 就是屏幕终端输入...2020-04-29 22:36:29123
0
-
原创 Go 学习笔记15.http服务
http-server.gopackage mainimport ( "fmt" "io" "net/http" "strings")// 处理函数func helloserver(w http.ResponseWriter,r *http.Request) { fmt.Println(r.URL.Path) strs :=strings.Split(r.URL.Path...2020-04-25 23:00:1470
0
-
原创 Go 学习笔记14.tcp服务
tcp-server.go// 收到什么发回去什么package mainimport ( "fmt" "log" "net")func main() { // 1.建立监听,绑定端口 tcp_server,err :=net.Listen("tcp",":8888") if err != nil { log.Panic("Failed to Listen",err...2020-04-25 22:49:1271
0
-
原创 Go 学习笔记13.编写测试
编写测试要求文件名命名 xx_test.go测试函数命名 TestXxx开头 Xxx首字母大写函数参数 *test.T 类型需要测试的程序源码animal.gopackage animalimport "fmt"// Cat猫 结构体type Cat struct { Name string Color string Age uint}// 一个初始化...2020-04-25 21:08:5776
0
-
原创 Go 学习笔记12.once使用 cond条件变量控制 生产者消费者模型
Go语言特色编程1.并发编程1.1 sync.WaitGroup类似于信号量Add(num) 加 num;Done() 减一;Wait() 阻塞,一直到减到0时为止package mainimport ( "fmt" "sync")func main() { var wg sync.WaitGroup wg.Add(10) for ...2020-04-25 17:34:0286
0
-
原创 Go 学习笔记11.互斥锁,读写锁,状态协程
互斥锁互斥所 它由标准库sync.Mutex来表示 方法有 Lock和Unlockpackage mainimport ( "fmt" "time")func printer(str string) { for _, data := range str { time.Sleep(time.Millisecond*100) fmt.Printf...2020-04-18 23:49:4793
0
-
原创 Go 学习笔记10.并发编程例子 定时器、打点器、工作池、速率限制、原子计数器
定时器go 语言自身实现了定时器package mainimport "time"import "fmt"func main() { // 创建一个定时器对象 , 指定需要等待的时间,然后它将提供一个用于通知的通道 timer1 := time.NewTimer(time.Second * 1) // 定时器失效的值之前,将一直阻塞。 <...2020-04-18 22:31:29132
0
-
原创 Go 学习笔记09.管道 常见操作
管道超时处理package mainimport "time"import "fmt"func main() { c1 := make(chan string, 1) go func() { time.Sleep(time.Second * 2) c1 <- "result 1" }() // timeout 1...2020-04-18 22:29:5763
0
-
原创 Go 学习笔记08.协程和管道
go 协程package mainimport "fmt"func f(from string) { for i := 0; i < 3; i++ { fmt.Println(from, ":", i) }}func main() { // 正常调用方法 f("normal") // 协程 // go f()...2020-04-17 18:02:0982
0
-
原创 Go 学习笔记07.错误处理
package mainimport "errors"import "fmt"// go语言的惯例,最有一个返回参数 需要一个错误类型// 如果传入的值为42 则触发异常func f1(arg int) (int, error) { if arg == 42 { // 使用 errors.New("错误信息") 来定义一个错误 retur...2020-04-16 23:34:2971
0
-
原创 Go 学习笔记06.指针、结构体、方法、接口
指针如果i是变量,通过 &i 语法来取得 i 的内存地址如果i是指针,通过*i 语法来取得 i的值package mainimport "fmt"// 一个函数,接收的是数据类型// 一个函数,接收的是数据类型的指针// 接收到参数后,将参数值重新赋值,在从外面调用// 发现普通的不会改变值,因为在不同的作用域内// 而传递指针的,会改变值,因为操作的是内存地址f...2020-04-16 22:53:3062
0
-
原创 Go 学习笔记05.闭包和递归
闭包闭包可以理解成 定义在一个函数内部的函数,有函数嵌套,且里面的函数用到了外层函数的值(没有传参)package mainimport ( "fmt")// 定义add函数,返回值是一个函数,这个函数接收一个int类型的参数,并且这个函数返回的也是int类型func add(base int) func(int) int { fmt.Pr...2020-04-15 16:44:4856
0
-
原创 Go 学习笔记04.函数 多返回值 变参函数
函数定义/*我们定义了一个plus函数,接收a,b两个参数,类型均是int,返回值也为int直接在main函数中调用*/package mainimport "fmt"func plus(a int, b int) int { return a + b}func main() { res := plus(1, 2) fmt.Println("1+2...2020-04-15 15:39:1677
0
-
原创 Go 学习笔记03.数组 切片 map字典 range遍历
数组arrays.gogo run arrays.gopackage mainimport "fmt"func main() { /* go的`数组`,是固定长度 []创建,[5] 指定数组长度 [5]int -> 创建一个长度为5的数组,元素类型是int型 没有指定数组,使用初始类型值,数组是[0,0,0,0,0] */ var a [...2020-04-15 15:18:1181
0
-
原创 Go 学习笔记02.流程控制 for循环/ if-else判断/ swith分支
for 循环for.gopackage mainimport "fmt"func main() { // 1.常见的for循环 i := 1 for i <= 3 { fmt.Println(i) i = i + 1 } // 2.经典的写法 // 初始化条件变量/循环条件/后续执行 // 经典的初始化/条件/后续形式 `for` 循环。 for j ...2020-04-14 18:07:5164
0
-
原创 Go 学习笔记01.环境搭建 使用Beego快速搭建项目
下载go源码包wget https://studygolang.com/dl/golang/go1.14.1.linux-amd64.tar.gztar -C /usr/local -zxvf go1.14.1.linux-amd64.tar.gzvim ~/.profile# GOexport GOROOT=/usr/local/goexport PATH=$PATH:$GORO...2020-04-09 18:04:44175
0