
Go
文章平均质量分 53
lookNo施
这个作者很懒,什么都没留下…
展开
-
一文解读Go并发编程
要搞清楚Go并发编程,就需要先清楚操作系统的线程库,因为真正的“跑腿的”是系统线程。先介绍线程实现的相关概念。原创 2022-10-01 10:39:47 · 640 阅读 · 0 评论 -
beego跨域问题解决方案-亲试成功
beego跨域请求解决方案原创 2022-07-03 00:51:14 · 604 阅读 · 0 评论 -
golang文件操作
1.使用Openfile对文件进行读写1.1 使用Openfile对文件写入os.OpenFile()函数能够以指定模式打开文件,从而实现文件写入相关功能。func OpenFile(name string, flag int, perm FileMode) (*File, error) { ...}name:要打开的文件名flag:打开文件的模式os.O_WRONLY 只写os.O_CREATE 创建文件os.O_RDONLY 只读os.O_RDWR 读写os.原创 2022-04-25 21:09:44 · 1875 阅读 · 0 评论 -
03.golang常用包-md5
md5的简单使用Sum 将字节切片转化为MD5值write 可以写入多个数据返回的值要进行转化package mainimport ( "crypto/md5" "encoding/hex" "fmt")func main() { data := md5.Sum([]byte("我是lei")) d := hex.EncodeToString(data[:]) fmt.Println(d) hasher := md5.New() hasher.Write([]byte原创 2022-04-19 21:11:10 · 476 阅读 · 0 评论 -
02.golang常用包-log
创建log两步骤设置日志格式关键位置输出格式package mainimport ( "log" "os")func main() { //设置格式 //设置flags log.SetFlags(log.Flags() | log.Ldate | log.Ltime | log.Lshortfile) //设置prefix log.SetPrefix("main:") //输出日志 log.Println("这是我的第一条日志") //log.Fatalln("这是原创 2022-04-18 23:54:26 · 299 阅读 · 0 评论 -
01.golang常用包-flag
1.flag使用五步骤定义变量接收参数绑定参数创建默认帮助函数解析flag使用参数package mainimport ( "flag" "fmt")func main() { var ( host string port int help bool h bool ) flag.StringVar(&host, "H", "127.0.0.1", "连接地址") flag.IntVar(&port, "P", 22, "连接端口")原创 2022-04-18 23:22:10 · 299 阅读 · 0 评论 -
03.gin获取参数
1.获取GET参数package mainimport ( "fmt" "net/http" "github.com/gin-gonic/gin")func getpage(c *gin.Context) { id1 := c.DefaultQuery("id1", "1") id2 := c.Query("id2") fmt.Println(id1) c.JSON(http.StatusOK, gin.H{ "id1": id1, "id2": id2, })}原创 2021-11-10 16:05:12 · 568 阅读 · 0 评论 -
02.gin路由分组与URL
1.路由分组package mainimport "github.com/gin-gonic/gin"func main() { router := gin.Default() v1 := router.Group("/v1") { v1.POST("/login",v1login) v1.POST("/register",register2) } v2 := router.Group("v2") { v2.POST("/login",v2login) v2.GET("原创 2021-11-10 15:17:37 · 328 阅读 · 0 评论 -
01.gin极速入门
1.基本代码package mainimport ( "github.com/gin-gonic/gin")func testget(c *gin.Context) { c.JSON(200, gin.H{ "data": "get", })}func main() { //实例化一个gin路由 router := gin.Default() //给绑定绑定路由,与函数 router.GET("/login", testget) //启动 router.Run()2原创 2021-11-10 10:45:02 · 139 阅读 · 0 评论 -
go tailf基本使用模板
go tailf基本使用模板package main import ( "fmt" "time" "github.com/hpcloud/tail") // tailf的用法示例 func main() { fileName := "./my.log" config := tail.Config{ ReOpen: true, // 重新打开 Follow: t转载 2021-08-03 21:09:02 · 213 阅读 · 0 评论 -
16.4Go语言干货-并发编程之锁
1. 并发安全与锁当多个goroutine同时操作有个资源的时候容易出现数据不安全(竟态问题)。举个栗子package mainimport ( "fmt" "sync")var n int //定义一个整数,初始值为0var wg sync.WaitGroupfunc add() { defer wg.Done() for i := 0; i < 1000000; i++ { n += 1 } }func main() { wg.Add(3) go ad原创 2021-06-28 10:31:12 · 84 阅读 · 0 评论 -
16.3Go语言干货-并发编程之池与select
1.goroutine池(worker pool)在平常工作中我们通常会指定启动goroutine数量采用worker pool 模式,控制goroutine的数量,防止goroutine泄漏和暴涨。package mainimport ( "fmt" "time")func worker(id int, jobs <-chan int, results chan<- int) { for j := range jobs { fmt.Printf("worker:%d原创 2021-06-27 13:43:46 · 98 阅读 · 0 评论 -
16.2Go语言干货-并发编程之channel
1.channel1.1函数与函数之间如何进行通讯?1.通过共享内存实现函数之间的通讯共享内存实现函数间的通讯有个极大的弊端,不同的`goroutine`容易发生竞态问题(数据不安全),未来保证数据交换的正确性,必须要给数据进行加锁,这样就会造成性能问题。2.通过通信共享内存在Go语言中就是利用`channel` 实现两个`goroutine`之间通过通信共享内存在Go语言中goroutine是并发的执行体,channel就是执行体之间的连接。channel可以让一个goroutine发送原创 2021-06-26 23:31:38 · 349 阅读 · 0 评论 -
16.1Go语言干货-并发编程之goroutine
1.并发与并行并发:同一时间段执行多个任务并行:同一时间点执行多个任务Go语言中的并发通过goroutine实现。goroutine属于用户态的线程(协程),支持千万级的并发。goroutine是由Go语言的timerun调度完成的,线程是由操作系统调度完成的。Go语言中使用channel在多个goroutine间进行通讯。goroutine与channel是Go语言秉承了CSP并发模式的基础实现的。2.goroutine2.1 使用goroutine在Go语言中使用goroutin原创 2021-06-26 20:48:35 · 197 阅读 · 0 评论 -
15.Go语言干货-time包
1.时间类型Go语言语言中时间类型为:time.Time我们可以使用 time.Now() 获取当前的时间对象。func main() { nowtimeObj := time.Now() fmt.Printf("当前时间对象:%v \n",nowtime)}`当前时间对象:2021-06-22 16:39:06.388243 +0800 CST m=+0.005000301`获取当前年、月、日、时、分、秒 year := nowtimeObj.Year() month := nowt原创 2021-06-23 00:18:39 · 401 阅读 · 0 评论 -
14.Go语言干货-文件操作
1.打开与关闭文件1.文件操作使用os包。2.os.Open()函数打开文件,返回一个*File与一个err。3.使用close()方法能够关闭文件,为了防止忘记关闭文件,通常与defer一起使用。package mainimport ( "fmt" "os")func main() { file, err := os.Open("./main.go") defer file.Close() if err != nil { fmt.Println(err) } else {原创 2021-06-21 10:43:17 · 147 阅读 · 0 评论 -
13.Go语言干货-包(package)
1. 包介绍包(package)是Go语言源码的集合,是一种高级的代码复用方案。Go语言提供了很多内置的包,比如:fmt、os、io等2.包的自定义在编写代码过程中根据情况要求,需要创建自己的包。包可以理解为一个存放.go文件的文件夹该文件夹下面的所有go文件都要在代码的第一行添加如下代码,声明该文件归属的包package 包名注意事项:一个文件夹下直接包含的文件只能归属于一个package,同样一个package的文件不能在多个文件夹下。包名可以不和文件夹的名字一样。包名为mai转载 2021-06-20 21:07:14 · 304 阅读 · 0 评论 -
12.Go语言干货-接口类型
1.前言永远不要高估自己接口(interface)是一种类型!!2.接口类型1.接口是一种类型,使用关键字type与interface进行定义2.接口类型只定义方法,不关心数据3.通俗地讲接口类型定义了规则,不关心规则的实现3.接口类型的定义接口的定义格式type 接口类型名 interface { 方法名1(参数列表1) 返回值列表1 方法名2(参数列表2) 返回值列表2 ...}接口类型名:从type关键字可以看出接口就是类型的一种,接口类型名称就是给接口去哟个名字。接口原创 2021-06-20 19:50:42 · 331 阅读 · 0 评论 -
11.Go语言干货-结构体
1. 类型别名与自定义类型1.1 自定义类型在Go语言中有一些基本的数据类型,整型、string、浮点型、布尔等数据类型。在Go语言中可以根据自身的需求,使用关键字type自定义数据类型。自定义类型是定义了一个全新的类型我们可以根据内置的基本类型来定义。也可以通过struct来定义。// 基于基本类型定义自定义类型的格式type MyInt int通过type关键字定义,MyInt就是一种新的类型,它具有int的特性1.2 类型别名类型别名规定:TypeAlias是Type的别名原创 2021-06-20 16:05:38 · 700 阅读 · 0 评论 -
9.Go语言干货-函数进阶
永远不要高估自己1. 变量作用域1.1 全局变量全局变量是定义在函数外部的变量,全局有效。函数体中可以访问到全局作用域的变量。package mainimport "fmt"var num = 100func f1(){ fmt.Println(num) // 函数内部可以访问到全局作用域的变量}func main(){ f1() }1.2 局部变量局部变量分为两种:1.函数体内部定义的变量。2.语句块中定义的变量函数内部定义的变量func f1(){原创 2021-06-17 15:43:43 · 121 阅读 · 0 评论 -
8.Go语言干货-函数基础
1.函数定义Go语言中定义函数使用关键字funcfunc 函数名(函数参数 参数数据类型)(返回值 返回值类型){ 函数体}函数名:由字母、数字、下划线组成,不能以数字开头。同一个包内函数名不能重名。参数:传递参数需要指定参数的数据类型,可以有多个参数,参数之间用逗号隔开。返回值:函数有返回值要指定函数返回值的数据类型,当有多个返回值时用()包裹,并用逗号隔开。函数体:函数功能的实现示例1:定义一个求两个数之和的函数(有参数与返回值的函数)func intSum(x int,原创 2021-06-17 11:05:06 · 108 阅读 · 0 评论 -
5.Go语言干货-数组Array
永远不要高估自己1.Array(数组)1.数组是同一种数据类型元素的定长集合2. 基本语法定义一个长度为3,元素类型为int的数组arrvar arr [3]int2.数组的定义var 数组名[数组长度]数组中元素的类型数组的长度必须是常量,数组的长度是数组类型的一部分([4]int与[5]int是不同的类型),定长(一旦定义长度,长度就不能改变)。数组可以通过下标(索引)进行访问,从0开始最后一个元素的下标是len-1,越界会报错!!3. 数组的初始化3.1 方法一 var原创 2021-06-16 16:35:24 · 218 阅读 · 0 评论 -
4.Go语言干货—流程控制
1.Go语言中常用的流程控制if与for 是Go语言中最常用的流程控制switch与goto 主要用于简化代码,降低代码重复2.if else2.1 if 条件语句的基本写法if 条件1{ 分支1} else if 条件2{ 分支2} else { 分支3}1.满足条件执行相应分支语句2.else if与else 都是可选的func getAge(){ age := 18 if age >= 36{ fmt.Print("中年") }else if age &原创 2021-06-16 15:32:34 · 110 阅读 · 0 评论 -
2.Go语言干货—基本数据类型
1. 整形1.1 整型按照符号分为两大类(有符号与无符号)1.2 整型按照长度分int8、int16、int32、int64 对应的无符号整型:uint8、uint16、uint32、uint641.3 特殊整型类型描述uint32位操作系统上就是uint32,64位操作系统上就是uint64int32位操作系统上就是int32,64位操作系统上就是int64uintptr无符号整型,用于存放一个指针注意:在使用int与uint类型的时候,不能假定他是3原创 2021-06-15 00:20:31 · 278 阅读 · 0 评论 -
1.Go语言干货—变量常量
1.标识符与关键字1.1 标识符标识符就是程序员定义的具有特殊含义的词。(变量名、常量名、函数名等)Go语言中标识符由数字字母下划线构成。1.2 关键字Go语言中有25个关键字 break default func interface select case defer go map struct chan else goto原创 2021-06-14 23:00:18 · 137 阅读 · 0 评论 -
3. Go语言干货—运算符
永远不要高估自己1. Go语言内置了5种运算符算数运算符(加减乘除)关系运算符逻辑运算符(not、and、or)位运算符(二进制的与、或、异或)赋值运算符2. 算数运算符运算符描述+加-减*乘/除%取余++(自增)与-- (自减) 在Go语言中属于独立的语句,不是运算符3.关系运算符关系运算符描述(返回布尔值,成立返回True,否则返回False)==两值是否相等!=两值是否不相等>原创 2021-06-16 15:05:53 · 1018 阅读 · 0 评论