go
longzhoufeng
这个作者很懒,什么都没留下…
展开
-
Go项目热编译工具gowatch
1、使用场景在golang项目编写过程中,需要不断的进行更改代码,调试代码,开发代码,但是每一次更改完代码之后,需要停止服务,再重新编译运行,才能看到效果,每次手动进行都很麻烦,所以就找了一个这样的开源工具gowatch来实时监听文件的改动进行编译。2、开始安装使用go get github.com/silenceper/gowatch安装完成之后,在main包目录下执行gowatch命令:3、高级用法支持的命令行参数:o : 非必须,指定build的目标文件路径p : 非必须,指定需要原创 2021-03-10 15:51:15 · 1986 阅读 · 0 评论 -
实操go开发环境的配置
实操go开发环境的配置原创 2023-02-22 10:36:47 · 782 阅读 · 0 评论 -
golang中strings.Title函数的用法
fmt.Println(strings.Title("full book all"))fmt.Println(strings.Title("note cloud"))fmt.Println(strings.Title("common"))输出如下,全部以大小写的单词开头Full Book AllNote CloudCommonTitle返回字符串s的副本,其中包含所有Unicode字母,这些单词以映射到其Unicode标题大小写的单词开头。...原创 2021-08-14 23:30:25 · 628 阅读 · 0 评论 -
golang中strings包中Replace函数参数介绍
func Replace(s, old, new string, n int) string将s中前n个不重叠old子串都替换为new的新字符串,如果n<0会替换所有old子串。fmt.Println(strings.Replace("full_book", "_", " ", -1))输出:full book原创 2021-08-14 23:02:39 · 533 阅读 · 0 评论 -
golang获取本机的mac地址和ip地址
1、获取mac地址和ip地址,需要使用golang的net模块package getNetInfoimport ( "fmt" "net")2、通过net模块获取计算机MAC地址代码package getNetInfoimport ( "fmt" "net")func GetMac() (macAddrs []string) { netInterfaces, err := net.Interfaces() if err != nil { fmt.Printf("fail原创 2021-08-08 00:17:54 · 5180 阅读 · 0 评论 -
golang数据类型转换(strconv包)
1、go不会对数据进行隐式的类型转换,只能手动去执行转换操作。1)转换数据类型的方式很简单,例如:// 浮点数a := 5.0// 转换为int类型b := int(a)2)Go允许在底层结构相同的两个类型之间互转。例如:// IT类型的底层是int类型type IT int// a的类型为IT,底层是intvar a IT = 5// 将a(IT)转换为int,b现在是int类型b := int(5)// 将b(int)转换为IT,c现在是IT类型c := IT(b)原创 2021-07-24 00:25:32 · 620 阅读 · 0 评论 -
golang日志
package mainimport ( "log" "os")func main() { //log.Println("打印日志信息") //log.Panicln("如果出现错误,就用panic打印日志信息") //log.Fatal("如果出现严重的错误,不希望程序执行了,终止程序,就用fatal打印日志信息") f, err := os.OpenFile("D:/golog.log", os.O_APPEND|os.O_CREATE, 0777) defer f.close原创 2021-07-22 21:34:02 · 203 阅读 · 0 评论 -
golang结构体指针
1、由于结构体是值类型,在方法传递时希望传递结构体地址,可以使用结构体指针完成,结合new(T)函数创建结构体指针peo := new(People)//因为结构体本质是值类型,所以创建结构体指针时已经开辟了内存空间fmt.Println(peo == nil) //输出:false//由于结构体中属性并不是指针类型,所以可以直接调用peo.Name = "jeff"fmt.Println(peo)//输出:&{jeff 0}peo1:=peopeo1.Name="高级语言"fmt原创 2021-07-20 09:39:17 · 2595 阅读 · 2 评论 -
golang结构体
1、什么是结构体1、结构体解释:将一个或多个变量合并到一起,形成新的类型,这个类型就是结构体2、结构体是值类型3、结构体定义语法,Go语言发明者明确认为结构体就是一种自定义类型type 结构体名称 struct{ 名称 类型//成员或属性}2、代码示例结构体可以定义在函数内部或函数外部(与普通变量一样),定义位置影响到结构体的访问范围如果结构体定义在函数外面,结构体名称首字母是否大写影响到结构体是否能跨包访问如果结构体能跨包访问,属性首字母是否大写影响到属性是否跨包访问原创 2021-07-20 09:31:19 · 299 阅读 · 0 评论 -
在golang中有flag.Parse()和无flag.Parse()区别
1、先看代码package mainimport ( "flag" "fmt" "time")// 1、定义命令行参数对应的变量,是这四个变量都指针类型var cliUsername = flag.String("name", "jack", "Input Your Name")var cliAge = flag.Int("age", 18, "Input Your Age")var cliGender = flag.String("gender", "male", "Input Y原创 2021-07-01 15:35:55 · 3783 阅读 · 0 评论 -
golang 第一行的注释 // build windows是什么意思
1、加上// build windows注释是兼容 windows 和 linux 系统的程序,比如设置终端中输出的内容的文字和背景色是windows,那么它需要调用 DLL,而在 linux下它却会报错,提示不存在这个程序,所以此时需要golang 语言层面的支持来解决这种问题。1、如果编译的是 windows 系统下的文件,则需要在文件头部加上2、如果是lunux下,则改为如下3、如果是IOS系统下,则改为如下:注:如果不编译此个文件,则会导致这个文件里面定义的方法,对象,变量不存在,所以原创 2021-07-01 11:07:18 · 1053 阅读 · 0 评论 -
golang下载所有的依赖包
有时候,我们发现一个开源项目,但是又不想打开IDEA来运行,通过cmd命令直接下载所有的依赖包运行就可以。1、通过go env 命令查看我的代理服务器是不是国内的仓库(如果是国外的可能有些会被Q)2、通过命令所有的依赖,相关的参数说明在下面会讲。go get -d -v ./...1、-d 标志只下载代码包,不执行安装命令;2、-v打印详细日志和调试日志,下载的时候可以查看到包的地址相关信息3、./…这个表示路径,代表当前目录下所有的文件(注意后面是三个点)3、有时候下载某个包需要下载最新原创 2021-06-30 11:23:57 · 3371 阅读 · 0 评论 -
golang函数多态
package mainimport "fmt"type FuncType func(int, int) int//实现加法func Add(a, b int) int { return a + b}func Minus(a, b int) int { return a - b}func Mul(a, b int) int { return a * b}//回调函数,函数有一个参数是函数类型,这个函数就是回调函数//计算器,可以进行四则运算//多态,多种形态,调用同原创 2021-06-30 00:10:08 · 561 阅读 · 0 评论 -
golang有多个返回值
package mainimport "fmt"//多个返回值func myfunc01() (int, int, int) { return 1, 2, 3}//go官方推荐写法func myfunc02() (a int, b int, c int) { a, b, c = 111, 222, 333 return}//go官方推荐写法,常用写法func myfunc03() (a, b, c int) { a, b, c = 111, 222, 333 return原创 2021-06-29 23:02:16 · 645 阅读 · 0 评论 -
golang无参有返回值:只有一个返回值
package main import "fmt"//无参有返回值:只有一个返回值//有返回值的函数需要通过return中断函数,通过return返回func myfunc01() int { return 666}//给返回值起一个变量名,go推荐写法func myfunc02() (result int) { return 666}//给返回值起一个变量名,go推荐写法//常用写法func myfunc03() (result int) { result = 666原创 2021-06-29 22:57:43 · 252 阅读 · 0 评论 -
centos下安装golang
1、下载所需的压缩包,下载地址如下:https://golang.google.cn/dl2、找到相关的下载版本3、我们这里是下载/home/software目录下wget https://golang.google.cn/dl/go1.15.13.linux-amd64.tar.gz下载时,可能网络被Q,出现下面的问题我们可以手动在windows下载下来,把它换到相应的目录,拖到这个目录就可以,如下4、解压文件,我们一般是把它解压到/usr/local/目录下,如果要解压到其它目录原创 2021-06-18 17:56:21 · 1424 阅读 · 2 评论 -
golang读取txt文档内容
1、首先,我们通过golang的net/http包,渲染到页面的方式展示在web上,这个我们需要用到net/http,2、读取IO文件需要用到ioutil包3、通过http包,通过路由的方式:http://localhost:8888/list/text.txt,在页面上读取text.txt的文件代码如下:http.HandleFunc("/list/", func(writer http.ResponseWriter, request *http.Request) { //1、获取请求路径原创 2021-03-24 09:25:10 · 2846 阅读 · 0 评论 -
golang的testing包使用
1、首先,我们在写代码时,代码测试是非常重要的一个事情,有些人会觉得写不写都无所谓,但是养成一种写代码之前做测试是一个良好的习惯,规范与否,取决于你是否把一种良好习惯坚持成为一种习惯。2、golang有几种测试类型,例如:testing.T,testing.B,testing.PB,testing.M3、testing.T类型的测试包是普通的测试 :package arrimport ( "fmt" "testing")func TestArr(t *testing.T) { t.Ru原创 2021-03-17 23:27:05 · 2445 阅读 · 0 评论 -
golang数据类型转换(strconv包)
1、Go不会对数据进行隐式的类型转换,只能手动去执行转换操作。例如:// 浮点数a := 8.0// 转换为int类型b := int(a)2、Go允许在底层结构相同的两个类型之间互转// FB类型的底层是int类型type FB int// a的类型为FB,底层是intvar a FB = 5// 将a(FB)转换为int,b现在是int类型b := int(5)// 将b(int)转换为FB,c现在是FB类型c := FB(b)1、不是所有数据类型都能转换的,例原创 2021-03-17 11:44:17 · 596 阅读 · 0 评论 -
golang函数中的os.Exit()使用
函数定义:func Exit(code int)Exit 函数可以让当前程序以给出的状态码 code 退出。一般来说,状态码 0 表示成功,非 0 表示出错。程序会立刻终止,并且 defer 的函数不会被执行。原创 2021-02-19 15:00:41 · 9711 阅读 · 0 评论 -
Go语言list(列表)
1、列表是一种非连续的存储容器,由多个节点组成,节点通过一些变量记录彼此之间的关系,列表有多种实现方法,如单链表,双链表。2、列表的原理可以这样理解:假设A、B、C三个人都有一个微信号,如果A把微信号分享给B,B再把微信号分享发给C…,这个分享的过程就建立了一个单链表结构。3、如果在这个基础上,C开始将微信号分享给自己所有微信号的人,自己微信号的所有人,再分享给他们的各自的人,这样就形成了一个双链表。4、在Go语言中,列表使用 container/list 包来实现,内部的实现原理是双链表,列表能够高原创 2021-02-17 19:31:52 · 3263 阅读 · 0 评论 -
gin框架在控制显示不同颜色的log日志信息
1、在goland编辑器中,查看日志信息时,全是灰色的日志颜色,查找问题不好定位,就想着在服务器控制台查看请求日志时,不同的问题显示不同日志信息颜色,这样便于查找问题,查看了gin框架的有一个函数直接在main里面调用就可以了。在main.go里调用:gin.ForceConsoleColor()package mainimport ( "github.com/gin-gonic/gin" "test.cn/src/utils")func main() { //直接在这里调用这一个函数就原创 2021-02-16 01:19:58 · 962 阅读 · 0 评论 -
golang gin框架初步使用
1、下载框架源码包go get -u github.com/gin-gonic/gin2、引入源码包package mainimport "github.com/gin-gonic/gin"func main() {}3、通过引入源码包,做一个DEMOpackage mainimport ( "fmt" "github.com/gin-gonic/gin" "log")func main() { r := gin.Default() r.GET("/home"原创 2021-02-09 00:27:42 · 225 阅读 · 0 评论 -
golang 使用go get命令下载依赖包时,为什么要加-u
在项目中,我们使用go get下载相关的依赖包时,有一个参数-u不知道是干什么用的,今天我们了解一下这个参数的作用。1、就好比我们在github上下载了一个包到本地,但是过了一段时间,发现这个github上的包已经更新了,比如,之前是1.0.1,过一段时间他可能就更新了1.0.5,那么这个时候,我们就可以在go get后面加一个-u来更新新版本的包,如果不加-u本地已经有了,就不会更新代码,也就不会用git去pull拉取新的代码。2、如果有些包已经出现依赖包缺失了,在goland上面引入的时候,直接报红原创 2021-02-01 11:56:50 · 4250 阅读 · 0 评论 -
Windows编译Linux运行的Golang程序
如果在VSCode的Terminal中编译会失败,因为Terminal不是管理员运行,但是在cmd.exe用管理员编译就可以。1、临时修改go环境参数SET CGO_ENABLED=0SET GOOS=linuxSET GOARCH=amd64通过SET直接设置linux环境,只是临时生效的,如果关闭窗口,再打开,又会恢复SET之前的配置参数。2、设置完成之后,我们可以测试是否生效go env CGO_ENABLEDgo env GOOSgo env GOARCH输入命令:go en原创 2021-01-29 11:33:12 · 1912 阅读 · 0 评论 -
go clean命令——清除编译文件
1、go clean命令可以移除当前源码包和关联源码包里面编译生成的文件2、go clean命令还可以指定一些参数。对应的参数的含义如下所示-i 清除关联的安装的包和可运行文件,也就是通过go install安装的文件;-n 把需要执行的清除命令打印出来,但是不执行,这样就可以很容易的知道底层是如何运行的;-r 循环的清除在 import 中引入的包;-x 打印出来执行的详细命令,其实就是 -n 打印的执行版本;-cache 删除所有go build命令的缓存-testcache 删除当前包原创 2021-01-29 09:37:08 · 4760 阅读 · 0 评论 -
go build 相关参数的介绍
在编译golang时,经常会遇到相关的参数要写,但是又不知道相关的参是啥意思,现在来整理一下相关的文档。例如:go build -a -o cloudbak上面的-a和-o分别是什么意思呢?通过查找官网相关资料,整理出下面的列表参数说明:标记描述-o指定输出文件。-a强行对所有涉及到的代码包(包括标准库中的代码包)进行重新构建,即使它们已经是最新的了。-n打印构建期间所用到的其它命令,但是并不真正执行它们。-p n构建的并行数量(n)。默认情况下并行数量与CPU数量相同。-race开启数据竞争检测原创 2021-01-28 22:31:03 · 2113 阅读 · 0 评论 -
golang 简单并发服务器demo
1、创建一个函数SendMsg(),开启监听服务器,并且创建连接,接收多个用户发送过来的数据func SendMsg() { //1、监听 listener, err := net.Listen("tcp", "127.0.0.1:8989") if err != nil { fmt.Println("err = ", err) return } //函数调用完毕,自动关闭conn defer listener.Close() //2、接收多个用户 for { conn,原创 2021-01-27 23:09:46 · 1157 阅读 · 0 评论 -
golang中使用crypto/md5
golang中md5包实现了MD5哈希算法1、常量-Constantsconst BlockSize = 642、MD5字节块大小。const Size = 163、MD5校验和字节数 func Sumfunc Sum(data []byte) [Size]byte返回数据data的MD5校验和。下面来举个例子吧在src目录新建一个目录cryptoDemo,在目录下再新建一个md5Demo.gopackage cryptoDemoimport ( "crypto/md5"原创 2021-01-27 17:49:06 · 1062 阅读 · 0 评论 -
Golang 在Windows下交叉编译报错的解决办法
前段时间,编译一个golang项目时,把golang的操作系统设为了GOOS=linux,在测试代码时,发现报错exec:"...\\exec\\mian":file does not exist后来,查看一下环境变量,才发现是GOOS是编译Linux系统的文件还原成windows的只需要设置如下就可以了。go env -w GOOS=windows...原创 2021-01-27 11:17:32 · 3639 阅读 · 3 评论 -
有缓冲channel(管道)
1、有缓冲的通道(buffered channel)是指一种在被接收前能存储一个或多个值的通道。2、这种类型的通道并不强制要求goroutine之间必须同时完成发送和接收,通道会阻塞发送和接收动作的条件也会不同,只有在通道中没有要接收的值时,接收动作才会阻塞,只有在通道没有在可用缓冲区容纳被发送的值时,发送动作才会阻塞。3、这导致有缓冲的通道和无缓冲的通道之间的一个很大的不同,无缓冲的通保证进行发送和接收goroutine会在同一时间进行数据交换;有缓冲的通道没有这种保证。有缓冲区的channel,只原创 2021-01-19 23:12:54 · 1104 阅读 · 0 评论 -
无缓冲channel(管道)
1、无缓冲的通道(unbuffered channel)是指在接收前没有能力保存任何值的通道,2、这种类型的通道要求发送goroutine和接收goroutine同时准备好,才能完成和发送接收操作,如果两个goroutine没有同时准备好,通道会导致先执行或者接收操作的goroutine阻塞等待。3、这种对通道进行发送和接收的交互行为本身就是同步的,其中任意一个操作都无法离开另一个操作单独存在。func main() { // 创建一个有缓冲区的channel ch := make(chan in原创 2021-01-19 22:56:06 · 1281 阅读 · 0 评论 -
golang的channel基本介绍
1、goroutine是运行在相同的的地址空间,因此访问共享内存必须做好同步,goroutine奉行通过通信来共享内存,而不是共享内存来通信2、channel是引用类型,是CSP格式的个体实现,用于多个goroutine通讯,其内部实现了同步,确保并发安全。3、当我们复制一个channel或用于函数参数传递时,我们只是拷贝了一个channel引用,因此,调用者或被调用者将引用一个channel对象,和其它的类型一样,channel的零值也是nil.如何定义一个channel呢?如下:make(cha原创 2021-01-19 22:41:50 · 1490 阅读 · 0 评论 -
go语言中的面向对象
对于面向对象的编程的支持go语言,设计得非常简洁而优雅,因为,go语言并没有沿袭传统面向对象编程中的诸多概念,比如,继承(不支持继承),尽管匿名字段的内存布局和行为类似继承,但它并不是继承、虚函数、构造函数和析构函数、隐藏的this指针等。go语言中没有封装、继承、多态这些概念。但同样通过别的方式实现这些特性:封装:通过方法实现继承:通过匿名字段实现多态:通过接口实现匿名字段:一般情况下,实义结构体的时候,字段名与其类型一一对应,实际GO支持只提供类型,而不写字段名的方式,也就是匿名字段,也称为嵌原创 2021-01-04 15:22:42 · 289 阅读 · 0 评论 -
go 复合类型
1、pointer:指针,默认值:nil2、array:数组,默认值:03、slice:切片,默认值:nil4、map:字典,默认值:nil5、struct:结构体,默认值:nil原创 2021-01-01 20:24:41 · 182 阅读 · 0 评论 -
go语言的工程管理
1、分文件编程(多个源文件)必须放在src目录下2、设置GOPATH环境变量3、同一个目录,包名必须一样1、下面同一级目录,包名不一样,直接报错2、同一级目录下,改为同一包名,就OK了4、通过 go env查看go相关的环境变量5、同一个目录,调用别的文件的函数,直接调用即可,无需包名引用...原创 2020-12-30 23:45:37 · 283 阅读 · 0 评论 -
go语言导入包的几种方式
1、导入包的简写方式package main//1、方式1:常规的导入方法//import "fmt"//import "os"//2、方式2:上面这种方式可以简写成如下方式,一般推荐这种方式import ( "fmt" "os")func main() { fmt.Println("this is a test go") fmt.Println("this is a test go", os.Args)}2、.操作,注意前面的点package mainimpor原创 2020-12-30 22:11:20 · 3570 阅读 · 0 评论 -
Go语言中defer的使用
1、先解释一下,go语言中关键字defer是干什么的?defer 用于注册延迟调用。defer 调用直到 return 前才被执。因此,可以用来做资源清理。多个defer语句,按先进后出的方式执行。defer语句中的变量,在defer声明时就决定了。看一下下面的例子:会先打印谁?package mainimport "fmt"func main(){ defer fmt.Println("aaaaaaaaa") fmt.Println("bbbbbbbbb")}上面的函数是原创 2020-12-29 11:36:13 · 342 阅读 · 2 评论 -
go 切片
1、go语言中切片英文是 slice,跟我们其它语言的数组有一点相似,其实,go切片(就是一个动态的数组),切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用类型的传递机制。2、使用和数组类似,遍历切片,访问切片的元素和求切片的长度len(slice)都是一样3、切片的长度是可以变化的。因此是一个动态变化的数组基本语法var 切片名 []类型比如:var a []int切片使用(3种方式)1、方式一,定义一个切片,用切片去引用前面创建好的数组。var arr [5]int =原创 2020-12-23 10:15:39 · 447 阅读 · 0 评论 -
Go语言的运算符
1 算术运算符运算符术语示例结果+加10 + 515-减10 - 55*乘10 * 550/除10 / 52(值取整数位,要想带小数为,则10.0/5=2.0)%取模(取余)10 % 31(取模公式:a-a/b*b)++后自增,没有前自增(单独语句,并不是运算符)a=0; a++a=1--后自原创 2020-12-22 23:45:04 · 185 阅读 · 1 评论