![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
golang基础
文章平均质量分 52
go语言基础语法
兔头哥哥
正在积极治疗秃顶
展开
-
golang设置国内镜像,vscode配置golang开发环境,vscode调试golang代码
golang设置国内镜像使用下方命令即可配置golang的国内镜像go env -w GO111MODULE=ongo env -w GOPROXY=https://goproxy.cn,directvscode安装golang插件1、下载插件根据上图提示安装所有工具出现下图提示表示成功2、编写项目代码测试运行在debugconsole中查看运行结果vscode调试golang代码打好断点运行调试...原创 2021-09-01 08:37:17 · 1206 阅读 · 0 评论 -
27、golang基础-互斥锁、读写锁
golang基础-锁1、Golang的锁2、sync.WaitGroup注意事项1.计数器不能设置为负值2.WaitGroup对象不是一个引用类型3、sync.Mutex4、sync.RWMutex1、Golang的锁Golang中的锁有两种:sync.Mutex和sync.RWMutexsync.Mutex的锁只有一种锁:Lock(),它是绝对锁,同一时间只能有一个锁sync.RWMutex叫读写锁,它有两种锁:Rlock()和Lock() RLock()叫读锁。它不是绝对锁,可以有多原创 2021-09-01 08:36:37 · 398 阅读 · 0 评论 -
gRPC框架:5.GRPC Geteway的实现
根目录为/server1、创建yaml文件放在trip.proto文件同级目录下/server/protp/trip.yamltype: google.api.Serviceconfig_version: 3http: rules: - selector: coolcar.TripService.GetTrip get: /trip/{id}2、运行下方两条命令在/server/protp目录中执行protoc --go_out=plugins=grpc,paths=s原创 2021-08-12 00:33:26 · 472 阅读 · 5 评论 -
gRPC框架:4.GRPC服务器及客户端
1、定义一个服务,同时用命令生成go代码protoc --go_out=plugins=grpc,paths=source_relative:gen/go trip.proto2、创建service文件/tripservice/trip.gopackage tripimport ( "context" trippb "coolcar/proto/gen/go")//Service implements trip service.type Service struct{}func原创 2021-08-02 23:46:43 · 501 阅读 · 0 评论 -
gRPC框架:3.ProtoBuf的复合类型、枚举类型、可选字段
1、复合类型和枚举类型1、创建proto文件syntax = "proto3";package coolcar;option go_package="coolcar/proto/gen/go;trippb";message Location { double latitude = 1; double longitude = 2;}//声明一个枚举类型enum TripStatus { TS_NOT_SPECIFIED = 0; NOT_STARTED = 1;原创 2021-07-31 00:39:13 · 2651 阅读 · 0 评论 -
gRPC框架:2.ProtoBuf的使用
1、创建proto文件文件创建好后,vscode会提示是否安装proto插件,选择proto3进行安装2、定义proto文件3、命令行生成go代码文件4、生成的文件如下5、使用生成的数据格式文件package mainimport ( trippb "coolcar/proto/gen/go" "encoding/json" "fmt" "google.golang.org/protobuf/proto")func main() { //1、模拟微服务和微服务之间原创 2021-07-30 00:57:04 · 137 阅读 · 0 评论 -
gRPC框架:1.安装ProtoBuf编译器
1、安装ProtoBuf编译器先进入下方网址https://github.com/protocolbuffers/protobuf点击Releases找到对应的版本下载系统对应的版本下载后是一个zip的压缩包,将其解压到文件夹中,放哪里都可以解压后配置环境变量命令行使用protoc命令查看是否安装成功安装成功后因为不能生成go的代码,所以需要go语言的代码插件装进protoc里面命令行运行命令安装go代码插件go install github.com/grpc-ecosy原创 2021-07-27 00:22:12 · 254 阅读 · 0 评论 -
26、golang中的json库
1、json.Marshal2、json.Unmarshal原创 2021-06-03 22:51:26 · 558 阅读 · 0 评论 -
25、golang中的http库
golang中的http库1、http.Get2、http.DefaultClient.Do3、http.Client4、http服务器的性能分析1、http.Get使用http.Get发送请求package mainimport ( "fmt" "net/http" "net/http/httputil")func main() { resp, err := http.Get("http://www.imooc.com") if err != nil { panic(err)原创 2021-05-31 23:15:00 · 748 阅读 · 0 评论 -
dlv调试golang
dlv调试golang调试所用代码dlv trace追踪调用轨迹调试模式调试模式基本命令1、打断点:2、带条件的断点3、查看所有断点4、重启当前进程5、继续执行到断点处6、逐行执行代码,不进入函数内7、逐行执行代码,遇到函数会跳进内部8、on...文章转载:https://www.cnblogs.com/realjimmy/p/13418508.html调试所用代码文件名为:hello.go代码内容如下package main import ( "fmt" "time" ) func转载 2021-05-27 20:59:01 · 2433 阅读 · 0 评论 -
24、go语言并发模式编程
大部分时候channel都是喝goroutine一起配合使用。本文主要介绍channel的一些用法通道(channel),像是通道(管道),可以通过它们发送类型化的数据在协程之间通信,避开所有内存共享导致的坑;channel的通信方式保证了同步性。数据通过channel:同一时间只有一个协程可以访问数据:所以不会出现数据竞争...原创 2021-05-20 00:15:37 · 100 阅读 · 1 评论 -
23、go语言传统同步机制
23、go语言传统同步机制WaitGroupMutexCondWaitGroupMutexCond原创 2021-05-18 19:56:37 · 98 阅读 · 0 评论 -
22、go语言select语句块
22、go语言select语句块1、基本用法2、简介3、example 14、example 45、example 5转载:https://www.jianshu.com/p/2a1146dc42c31、基本用法select是用来监听和channel有关的IO操作,当IO操作发生时,触发对应的动作select {case <- chan1://如果chan1成功读取到数据,则进行该case处理语句case chan2 <- 2://若成功向chan2写入数据,则进行该case处理转载 2021-05-17 23:21:51 · 131 阅读 · 0 评论 -
21、go语言channel用法
21、channelchannel作为参数channel作为数组channel作为返回值channel作为参数func worker(id int, c chan int){ for { fmt.Printf("Worker %d received %d\n",id, <- c) }}func chanDemo(){ var c chan int = make(chan int) //c := make(chan int) go worker(0, c) c <- 1原创 2021-05-16 15:44:42 · 462 阅读 · 0 评论 -
20、go并发编程基本概念
20、go并发编程1、协程Coroutine简介数据访问冲突检测命令goroutinegoroutine可能切换的点2、抢占式和非抢占式区别1、协程Coroutine简介1.协程是一种轻量级的“线程”2.协程是非抢占式的多任务处理,由协程内部主动交出控制权3.协程是编译器/解释器/虚拟机层面的多任务(不是操作系统层的多任务,操作系统只有线程,没有协程,go语言中可以看做是编译器级别的多任务,编译器会把go function解释成一个协程,具体执行上go语言有一个调度器,用来调度协程,)4、多个协原创 2021-05-16 14:41:41 · 90 阅读 · 0 评论 -
19、go生成文档
19、go生成文档go doc命令godoc命令书写examplego doc命令go docgo help doc :将go doc相关的命令以及用途打印出来go doc function_name:function_name表示函数名称,将会把函数的参数和返回值打印出来godoc命令godoc命令用于生成文档比如生成http文档内容的命令:godoc -http :6060书写examplego语言支持在测试中书写Example,可以用于让其他人快速了解书写的代码如何使用...原创 2021-05-14 23:34:58 · 563 阅读 · 0 评论 -
18、go语言性能调优
go语言性能调优go语言性能调优方式第一步:第二步:第三步:第四步:Graphviz安装prof工具使用教程go语言性能调优方式第一步:执行命名生成cpuprofile文件go test -bench . -cpuprofile cpu.out第二步:执行命令查看第一步生成的cpu.out文件(cpu.out是性能日志的文件)go tool pprof cpu.out第三步:第二步执行完后,会进入一个交互式的命令行此时执行web,会打开一张svg的流程图,流程图中展示了程序运行所需要的时原创 2021-05-10 23:31:01 · 186 阅读 · 0 评论 -
17、go测试
go测试1、表格驱动测试例子1:命令行运行测试例子22.代码覆盖率goland查看代码覆盖率命令行查看代码覆盖率3.测试性能例子1(使用goland编辑器测试)例子2(使用命令行测试)1、表格驱动测试例子1:待测试代码文件:src/selftesting/basic/basic.gopackage basicimport ( "fmt" "math")func triangle(){ var a, b int = 3, 4 fmt.Println(CalcTriangle(a, b)原创 2021-05-10 22:16:26 · 285 阅读 · 1 评论 -
16、go语言type关键字
go语言type关键字1、定义结构体2、类型等价定义3、结构体内嵌匿名成员4、定义接口5、定义函数类型综合示例文章来源:https://studygolang.com/articles/17179?fr=sidebar1、定义结构体type person struct { name string age int}func main() { p := person{ name:"tony", age: 18,} fmt.Println(p.name)}2、类型等价定义类型重命名//转载 2021-05-09 22:20:58 · 212 阅读 · 0 评论 -
15、go语言文件操作
go语言文件操作文件操作文件操作常见操作示例1:test.txt内容Hello World ...Hello World ...Hello World ...Hello World ...Hello World ...Hello World ...Hello World ...Hello World ...Hello World ...Hello World ...//文件读取:os.Read()和os.ReadAt()实验const filename = "test.t原创 2021-05-09 11:31:08 · 57 阅读 · 0 评论 -
14、go语言依赖管理
14、go语言依赖管理简介GOPATHGOVENDORgo mod初始化go modgo mod增加依赖go mod更新依赖旧项目如何迁移到go mod中简介go的依赖管理截止到目前经历了3个阶段:GOPATH、GOVENDOR、go modGOPATH在 Go 1.8 版本之前,GOPATH 环境变量默认是空的。从 Go 1.8 版本开始,Go 开发包在安装完成后,将 GOPATH 赋予了一个默认的目录,参见下表。GOVENDOR每个项目都有一个vendor目录,用来存放第三方库许多第三方原创 2021-05-07 20:24:37 · 545 阅读 · 0 评论 -
12、go语言的duck typing
学习目标:提示:这里可以添加学习目标例如:一周掌握 Java 入门知识学习内容:提示:这里可以添加要学的内容例如:1、 搭建 Java 开发环境2、 掌握 Java 基本语法3、 掌握条件语句4、 掌握循环语句学习时间:提示:这里可以添加计划学习的时间例如:1、 周一至周五晚上 7 点—晚上9点2、 周六上午 9 点-上午 11 点3、 周日下午 3 点-下午 6 点学习产出:提示:这里统计学习计划的总量例如:1、 技术笔记 2 遍2、CSDN 技术博客 3 篇转载 2021-05-05 13:26:08 · 539 阅读 · 0 评论 -
11、go语言的包、封装、组合
go语言的包和封装包封装包1、go语言中,每个目录为一个包2、main包包含可执行入口3、为结构定义的方法必须放在同一个包内,可以在不同的文件中封装go语言中结构、常量、方法首字母大写,代表public,首字母小写代表privatepublic的可以支持其他包的调用...原创 2021-05-05 01:25:45 · 159 阅读 · 0 评论 -
10、go语言结构体struct
go语言struct1、struct1.1、struct详解定义struct1、struct1、go中没有类,但是可以通过结构体struct实现oop2、struct的成员(也叫属性或字段)可以是任何数据类型(普通类型、复合类型、函数、map、interface、struct),所以我们可以理解为go语言中的“类”1.1、struct详解struct区分大小写,首字母大写,则该成员为公有成员(对外可见),否则是私有成员(对外不可见)定义structpackage maintype Books原创 2021-05-02 01:46:55 · 857 阅读 · 0 评论 -
9、go的byte、rune、string操作
go数据结构:byte和runebyterune二进制十六进制bytebyte是uint8的别名类型byte类型的值需要用8个比特位表示runerune类型是int32的别名类型一个rune类型的值即可表示一个unicode字符遍历runefunc main { s := "hello你好呀!" for i,ch := range []rune(s){ fmt.Printf("(%d %c)", i, ch) }}获取字符串字节长度s := "你好呀"len := len原创 2021-05-02 01:24:28 · 582 阅读 · 0 评论 -
8、go语言的map
go语言的map概览定义mapmap遍历获取value判断value是否存在删除value概览创建:make( map[string]int)获取:m[key]key不存在时,获取value类型的初始值用 value, ok := m[key]来判断是否存在key用delete函数删除一个key用range遍历map,但是不保证遍历顺序,如需顺序需手动对key排序使用len函数获得元素个数map使用哈希表,必须可以比较相等除了slice,map,function的内建类型,其他都可作为k原创 2021-04-27 00:33:08 · 179 阅读 · 0 评论 -
7、go切片(Slice)
go切片go切片(Slice)注意slice上建立slicecapgo切片(Slice)Slice使用的几种方式arr := [...]int{0,1,2,3,4,5,6,7}fmt.Println( "arr[2:6] = ", arr[2:6]) //arr[2:6] = [2 3 4 5]fmt.Println( "arr[:6] = ", arr[:6]) //arr[:6] = [0 1 2 3 4 5]fmt.Println( "arr[2:] = ", arr[2:]) //ar原创 2021-04-25 18:10:32 · 81 阅读 · 0 评论 -
6、go数组
go数组go数组go数组1、[10]int和[20]int是不同的类型,若作为参数传递给函数会报错2、在go语言中一般不直接使用数组,而是用切片3、调用func f( arr [10]int)会拷贝数组,而不是引用传值原创 2021-04-25 14:23:52 · 64 阅读 · 0 评论 -
5、go指针
go指针指针指针package mainimport "fmt"func swap(a, b *int) { *a, *b = *a, *b}func main() { a, b := 3,9 swap( &a, &b) fmt.Println(a, b)}转载 2021-04-25 02:15:42 · 72 阅读 · 0 评论 -
4、go函数
go函数函数函数go函数的参数跟变量定义一样,参数名在前,类型在后,相同参数类型可以用逗号分隔返回值类型在参数括号后面注意:函数有多个返回值的时候要注意不要用起名字的方式返回,代码一长很容易混乱函数有多个返回值一般用于返回errorpackage mainfunc eval( a,b int, op string) int{ switch{ case "+": return a + b case "-": return a - b case "*": return a *原创 2021-04-25 01:52:03 · 507 阅读 · 0 评论 -
3、go数据类型、常量、枚举、if、switch、for
go基础语法变量类型常量枚举变量类型布尔型:true或false数字型:int(整型)、float32和float64、复数字符串类型:go字符串由单个字节连接,字节使用utf-8编码派生类型:指针(Pointer)、数组、结构化类型、函数类型、切片类型、接口类型(interface)、Map类型详细参考:https://www.runoob.com/go/go-data-types.html常量const package_cons string = "定义在包内部的常量"func原创 2021-04-22 22:54:44 · 217 阅读 · 0 评论 -
2、go命令
go命令1、基础命令1.1、go run2.go build1、基础命令1.1、go run用于运行命令源码文件,只能接受一个命令源码文件、若干个库源码文件作为文件参数go run命令内部操作步骤:1、先编译作为文件参数的源码文件2、编译结果放入一个临时文件夹中3、运行编译结果(编译结果包含命令源码文件被编译后生成的可执行文件,以及相关库源码文件编译后生成的归档文件)例子:https://github.com/hyper-carrot/goc2p2.go buildgo install原创 2021-04-19 16:09:57 · 84 阅读 · 0 评论 -
1、go基础概念、go安装、代码包
go基础1、go简介2、go优势3、go劣势4、go安装和设置4.1、linux4.1.1、go安装4.1.2、go设置5、常用概念和定义5.1、工作区和GOPATH:5.2、平台相关目录5.3、源文件分类和含义5.4、代码包相关知识1、go简介1.1、静态类型、编译型、开源语言1.2、校本化语法、支持多种编程范式1.3、函数式、面向对象1.4、原生、给力的并发支持(原生支持并发编程)2、go优势脚本化语法会有很高的开发效率静态类型+编译型会有很高的程序运行速度原生支持并发会降低很多的开发原创 2021-04-16 00:23:51 · 299 阅读 · 0 评论