go大师 基础知识
文章平均质量分 55
go开发知识
一越王超
软件系统工程师
展开
-
VSCode无go的代码提示
我安装的是go的1.17版本,之后安装了VScode,VScode版本应该不会影响编程。首先遇到了VSCode下载go插件失败的问题,经过一系列折腾找出了问题,如果你也有此问题,可参考如下。VS Code 安装go插件失败分析及解决方案_一越王超的博客-CSDN博客接下来准备编程,可是遇到了没有代码提示的问题,在网上找了很多方法,如下:方法一:在setting.json添加如下配置:"go.useLanguageServer": true结果,失败!!!方法二:处理goc.原创 2022-05-01 15:38:12 · 8719 阅读 · 1 评论 -
beego项目运行无法访问 报错 missing go.sum entry for module providing package github.com/beego/beego/v2/serve
问题背景在我历经磨难,搞定了GOPATH和GOROOT的安装环境问题后,又历经磨难先git自动安装可beengo,又手动安装了bee后,终于觉得可以启动一个bee的服务了。结果,在我成功创建项目并成功运行后,访问却报错:missing go.sum entry for module providing package github.com/beego/beego/v2/server/web (imported by litblog); to add:报错示例:C:\GoLang\G.原创 2022-05-01 11:45:47 · 4379 阅读 · 4 评论 -
go工具包beego和bee安装
go工具包beego和bee安装,和python使用pip作为工具包管理工具不同,go直接使用git作为go的工具包管理工具。go的工具包安装依赖git,因此go开发环境需要先安装有git,此外还要处理好go的环境配置等问题。我们以beego和bee的安装作为示例,展示一下直接git下载安装beego和手动安装bee的方式。go install: version is required when current directory is not in a module原创 2022-05-01 09:46:21 · 3460 阅读 · 0 评论 -
VS Code 安装go插件失败分析及解决方案
问题背景VSCode是我们开发go程序的常用工具,但是安装VSCode成功后,创建一个.go文件会有如下提示:这个是vscode提示你需要安装go插件,但是当你点击install all进行安装时,发现会安装失败。Installing 8 tools at D:\pragrams\go\bin gocode gopkgs go-outline go-symbols dlv godef goreturns golintInstalling githu原创 2022-04-30 11:09:02 · 5041 阅读 · 2 评论 -
go 商品秒杀系统架构设计
秒杀抢购的发展经历如下:1.0版,没有独立的秒杀系统,代码高度耦合,由于MySQL的性能瓶颈大流量涌入会导致平台整体崩溃。2.0版,使用Redis搭建独立的秒杀系统,实现系统解耦进行限流和过载保护,平台不会崩溃,但是秒杀系统可能会崩溃。3.0版,对秒杀系统内部进行拆分,对秒杀系统单独做限流和过载保护等。原创 2022-04-26 11:23:54 · 882 阅读 · 0 评论 -
go日志收集系统项目简介
本节内容以go语言设计一个简易的日志收集系统,并且完成日志的客户端开发。项目背景每个系统都有日志,当系统出现问题的时候需要通过日志解决问题。当系统机器比较少时,登录服务器即可查看日志。但当机器规模较大时,登录机器看就不太现实,这个时候就需要日志收集系统。...原创 2022-04-26 07:54:21 · 2955 阅读 · 0 评论 -
go基础 go的HTTP网络编程
go的http编程有如下优点:Go原生支持http, import(“net/http”) Go的http服务性能和nginx比较接近 几行代码就可以实现一个web服务http编程示例原创 2022-04-23 11:07:24 · 7027 阅读 · 0 评论 -
go基础 socket网络编程
服务端的处理流程:监听端口 接收客户端连接 创建goroutine,处理链接客户端的处理流程:建立与服务端的连接 进行数据收发 关闭链接网络编程基础1. 网络中进程之间如何通信进 程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如UNIX BSD有:管道(pipe)、命名管道(named pipe)软中断信号(signal)UNIX system V有:消息(原创 2022-04-23 10:35:24 · 728 阅读 · 0 评论 -
go基础 反射
Go语言提供了一种反射机制,能够在运行时更新对象中的变量和调用对象中的方法。原创 2022-04-23 01:15:34 · 81 阅读 · 0 评论 -
多语言通信基础 03 go和python的rpc通信
python有rpc开发的相关协议,同样go也有rpc的序列化协议Gob。标准库的RPC默认采用Go语言特有的gob编码,因此从其它语言调用Go语言实现的RPC服务将比较困难。在互联网的微服务时代,每个RPC以及服务的使用者都可能采用不同的编程语言,因此跨语言是互联网时代RPC的一个首要条件。得益于RPC的框架设计,Go语言的RPC其实也是很容易实现跨语言支持的。go语言的json序列化RPCGo语言的RPC框架有两个比较有特色的设计:一个是RPC数据打包时可以通过插件实现自定义的编码和解码;另原创 2022-04-19 10:06:46 · 2810 阅读 · 0 评论 -
多语言通信基础 02 ZERORPC实现rpc调用
zerorpc是利用zeroMQ消息队列+msgpack消息序列化(二进制)来实现类似grpc的功能跨语言远程调用。主要使用到zeroMQ的通信模式是ROUTER-DEALER,模拟grpc的请求-响应式和应答流式 RPC:zerorpc还支持 PUB-SUB通信模式的远程调用。zerorpc实际上会依赖msgpack-python、pyzmg、future、greenlet、geventGitHub - 0rpc/zerorpc-python: zerorpc for pythonhttps:/原创 2022-04-18 10:52:41 · 2302 阅读 · 0 评论 -
多语言通信基础 01 rpc
什么是rpcRPC(Remote Procedure Call) 远程过程调用,简单理解就是一个节点请求另一个节点提供服务。对应rpc的是本地过程调用,函数调用是最常见测本地过程调用。将本地过程调用变为远程过程调用会面临各种各样的问题。本地过程调用:...原创 2022-04-17 16:14:42 · 1167 阅读 · 0 评论 -
go 基础 并发编程
并发编程是go最大的特征。在python、Java、C++的并发编程主要是多进程和多线程的开发。但是每个线程占用的内存较多,系统开销大。因为web2.0的高并发使得单靠线程进行并发变得很不经济。原创 2022-04-13 11:19:10 · 803 阅读 · 0 评论 -
go基础 go的包与编码规范
go语言包的概念go语言在1.12之前没有包管理的概念,但之后的版本就有了包管理的概念。带有go.mod文件夹就是一个包。 同一个文件夹下面的源码中不能出现多个package。需要多个package则需要新建源码同级别文件夹。 go的包中采用的都是文件夹,文件夹一般用小写。同一级文件夹具有相同的package 导入其他文件夹的时候需要从项目根文件夹开始。 同一个文件夹下的package名称可以不和文件夹一致go语言的import方式...原创 2022-04-13 09:40:38 · 1037 阅读 · 0 评论 -
go基础 接口
go没有面向对象的概念,因此也没有多态,但是go提供了“接口”来达到多态的效果。但是,go语言中的接口和Java中的接口是不一样的,go语言中的接口其实更接近与python中的协议也就是python中的鸭子类型。python中的鸭子类型python中的鸭子类型简单理解就是看他像什么就是什么。例如python中的for语句的根本就是可以对iterable类型进行操作,也就是实现了__iter__的类都可以用for循环。程序示例:# _*_ coding:ut...原创 2022-04-11 11:00:46 · 837 阅读 · 0 评论 -
go基础 结构体
go语言的关键字type和struct可以定义一个结构体,而go语言中结构体无处不在。原创 2022-04-06 16:56:34 · 519 阅读 · 0 评论 -
go基础 函数
函数的定义go的函数定义方法多样且灵活。程序示例:package mainimport ( "errors" "fmt")// 函数的几个要素: 函数名、参数、返回值//函数定义方法1func add(a int, b int) int{ return a+b}//函数定义方法2func add2(a int, b int) (sun int){ sun = a + b return sun}//函数定义方法3:返回多个值func div(a int原创 2022-03-31 17:32:52 · 535 阅读 · 0 评论 -
go基础 指针
指针有很强大的功能,是C语言性能强大的基础。// go语言中有一个list, 是数据结构中提到的链表,基于指针实现。// python中的list还是基于数组实现的。原创 2022-03-30 18:16:10 · 933 阅读 · 0 评论 -
go基础 数据结构map
go中的map结构类似于python中的dict。go中map的value和key在声明的时候需要指定类型。原创 2022-03-30 17:25:30 · 1643 阅读 · 0 评论 -
go基础 slice切片
slice切片的定义初始化方法go的切片有三种定义和初始化的方法,此外注意,数组的传递是值传递,但切片是引用传递:程序:package mainimport "fmt"func main() { // 数组的问题在于大小确定,不能修改,而切片是一个动态数组 // 切片定义方法1: s1 := [] string {"C", "C++", "GO", "python"} fmt.Printf("%T\n", s1) // []string是切片类型 fmt.Println(l原创 2022-03-24 16:03:28 · 1413 阅读 · 0 评论 -
go基础 数组
数组的声明和基本操作数组的声明和基本操作为:package mainimport "fmt"func main(){ // go语言中的数组和python中的list可以对应理解,slice和python的list更像 // 静态语言中的数组:大小确定 类型一致 //数组的声明 var courses [10] string // 数组的创建:静态语言对数据要求严格 course := [5] string {"python", "go", "C++"} // 1. 数组支原创 2022-03-23 18:33:57 · 977 阅读 · 0 评论 -
go基础 switch语句
go语言中的switch语句用法很灵活,有很多使用场景。特点一:其他语言不能做区间判断,但是go可以package mainimport "fmt"func main() { /* >90 卓越;80-89 优秀;70-79 良好; 60-69 合格;<60 不合格; */ score := 85 grade := "卓越" switch { // 其他语言不能做区间判断,但是go可以 case score > 90: grade = ".原创 2022-03-21 18:23:41 · 2546 阅读 · 0 评论 -
go基础 goto语句
Go语言的goto语句可以无条件的转移到过程中指定的行。goto语句通常与条件语句配合使用,可用来实现条件转移,构成循环,跳出循环体等功能。但是在结构化程序设计中一般不主张使用goto语句,以免造成程序流程的混乱,使理解和调试程序都产生困难。...原创 2022-03-21 17:49:46 · 711 阅读 · 0 评论 -
go基础 if条件语句
Go 语言提供了以下几种条件判断语句:语句 描述 if 语句 if 语句由一个布尔表达式后紧跟一个或多个语句组成。 if...else 语句 if 语句后可以使用可选的else 语句, else 语句中的表达式在布尔表达式为 false 时执行。 if 嵌套语句 你可以在if或else if语句中嵌入一个或多个if或else if语句。 switch 语句 switch语句用于基于不同条件执行不同动作。 select 语句 ...原创 2022-03-21 17:46:17 · 827 阅读 · 0 评论 -
go基础 for循环使用
go的for循环主要有以下几种用法用法一:常规用法package mainimport "fmt"func main() { // 计算1-10的和 sum := 0 for i := 1; i <=10; i++ { sum += i } fmt.Println(sum)}用法二:package mainimport "fmt"func main() { // 用法2 n := 0 for ; n <= 10; { fmt.Pr原创 2022-03-21 17:43:01 · 1527 阅读 · 0 评论 -
go基础 数据类型转换
go语言中不支持变量间的隐式类型转换,但是支持常量到变量间的隐式数据类型转换底层数据类型相同的转换用简单转换原创 2022-02-15 16:10:58 · 251 阅读 · 0 评论 -
go基础 数据类型:字符和字符串
字符和字符串本质不一样。原创 2022-02-15 15:33:39 · 239 阅读 · 0 评论 -
go基础 数据类型:整形和浮点型
python是一种动态数据类型的语言,而go是静态数据类型语言。二者有什么区别?优缺点各是什么?原创 2022-02-15 12:00:00 · 478 阅读 · 0 评论 -
go基础 变量作用域对比python
注意区别go和python的变量作用域。go是静态变量,python是动态变量。一般我们在python中不使用全局变量。go变量作用域演示:gopackage mainimport "fmt"var a int = 20 //定义全局变量需要用var声明,全局变量定义了可以不使用func main() { // 变量的作用域 c := 10 // 定义在函数内部的局部变量 fmt.Println(c) println("全局变量a", a) // 局部变量可以和全局变原创 2022-02-15 10:12:48 · 326 阅读 · 0 评论 -
go基础 常量定义及使用
常量定义代码实例package mainfunc main() { // 常量定义:既可以被调用,又不能被修改 const PI = 3.1415926 r := 2.0 println(2*PI*r) // 集合法定义常量 const ( MALE = 1 FEMALE = 2 ) println(MALE, FEMALE)}原创 2022-02-14 11:48:18 · 1169 阅读 · 0 评论 -
go基础 匿名变量
go中匿名变量经常使用,go中的匿名变量是什么,有什么用?代码:package mainimport "fmt"func GetData() (int, int) { return 100, 200}func main(){ a, _ := GetData() _, b := GetData() //c := GetData() // 报错:assignment mismatch: 1 variable but GetData returns 2 values fmt.原创 2022-02-14 11:36:36 · 599 阅读 · 0 评论 -
go基础 变量定义
变量定义的几种方式原创 2022-02-09 17:52:26 · 278 阅读 · 0 评论 -
go的打印输出方式
go的打印输出方式展示代码:package mainimport "fmt"func main() { //打印输出方式一 println("hello golang!") //打印输出方式二: 更为普遍的打印输出方法 fmt.Println("哈喽 golang")}运行效果:原创 2022-02-14 11:03:17 · 2654 阅读 · 0 评论 -
go项目运行方法
操作前提条件:系统已经安装go方法1:直接终端运行.go文件命令:go run hello.go方法2:编译.go文件后,终端运行.exe文件编译后会产生一个 .exe编译文件,可直接运行方法3:golang编辑器中运行...原创 2022-02-14 10:48:15 · 11029 阅读 · 0 评论 -
golang常用设置——修改背景
golang打开后默认背景为黑色,很伤眼睛。我们修改为白色背景,设置位置如下:原创 2022-02-14 10:33:02 · 1340 阅读 · 0 评论 -
go开发环境搭建
windows系统下搭建go开发环境windows下可以选择goland或者vscode进行go开发。goland需要注意版本和go的版本相匹配,vscode不存在此问题。go安装下载地址:Go语言中文网- Golang中文社区 下载后exe版本后可直接安装。goland环境下载地址:Go语言中文网- Golang中文社区vscode环境下载地址:Go语言中文网- Golang中文社区...原创 2022-02-09 17:48:37 · 259 阅读 · 0 评论