
Go
文章平均质量分 51
晓恩ghm
持之以恒, 厚积薄发! 梦想还在, 我心永恒! The life must be wonderful!
展开
-
Go语言程序基本结构
文章目录标识符关键字运算符字面量与分隔符常量与变量标识符关键字每一种语言都有属于自己的关键字,较之C语言32个关键字,java语言51个关键字,C++语言63个关键字(C++98/03),Go语言仅仅有25个关键字,为当中最少的,遵循Go语言简洁的原则,关键字如下:关键字含义import文件中引用包声明package包声明var定义变量type...原创 2019-10-10 00:11:50 · 640 阅读 · 0 评论 -
golang 死锁
文章目录死锁定义(1)重复锁定导致(2)解锁未锁定的锁本文主要记录下go 语言中出现死锁的几种情况:死锁定义定义:整个代码所有的goroutine都阻塞了,当然也包括主goroutine(1)重复锁定导致就是说你对同一个锁进行了至少两次锁定(lock),不管你的锁是读写锁还是互斥锁,只要连续进行了至少两次锁定就会导致死锁,应发panic并且是运行时的panic,致命的bug,recove...原创 2019-08-05 23:40:53 · 1233 阅读 · 0 评论 -
golang 变量命名建议
字母或下划线开始,多个字母、数字和下划线组合而成。驼峰命名区分大小写函数内的局部变量优先使用短变量不要使用保留的关键字最好不要用与预定义常量,类型,内置函数相同的名字最好不要以所在的包名开头专有名词建议全部大写...原创 2019-06-26 23:46:53 · 2368 阅读 · 0 评论 -
channe状态与读取操作之间的关系
channe状态与读取操作之间的关系package mainimport ( "fmt")func main() { test1() // 1. 读取一个未初始化的channel---->此协程永久阻塞 test2() // 2. 读取一个初始化并非空的channel---->正确读到值 test3() // 3. 读取一个初始化但为空的channel---...原创 2019-06-20 00:59:59 · 560 阅读 · 0 评论 -
代码的侵入式和非侵入式是什么意思
目录侵入式(引入或继承了别的包或框架)非侵入式(没有依赖,自主研发)侵入式(引入或继承了别的包或框架)从字面意思理解,就是你的代码里已经嵌入了别的代码,这些代码可能是你引入过的框架,也可能是你通过接口继承得来的(比如:java中的继承),这样你就可以拥有侵入代码的一些功能。所以我们就称这段代码是侵入式代码。非要说侵入式代码的优点:通过侵入代码与你的代码结合可以更好的利用侵入代码提供给的功能。缺...原创 2019-04-10 21:11:51 · 24661 阅读 · 2 评论 -
golang中值类型方法集合和指针类型方法有什么区别?
golang中值类型方法集合和指针类型方法有什么区别?什么是值类型方法集合?什么是指针类型方法集合?接受方法类型既有值类型又有指针类型,有什么区别?什么是值类型方法集合?先看一段代码:type people struct { Name string Age int}func (p people) SetName(name string) { p.Name = name}f...原创 2019-04-10 21:44:40 · 1154 阅读 · 1 评论 -
golang通道的定义
一. 通道的定义先上一段代码,func main() { // 示例1 //通道是一个先进先出(FIFO)的队列 channel := make(chan int,3) channel <- 1 channel <- 2 channel <- 3 fmt.Printf(&原创 2018-11-18 11:12:31 · 1682 阅读 · 0 评论 -
golang数组、切片(slice)详解
golang 切片扩容的探讨分以下几种情况:1.切片每次新增个数不超过原来的1倍,且每次增加数不超过1024个,且增加后总长度小于1024个,这种情况下扩容后为原来的2倍 s1 := make([]int, 0) fmt.Printf("The capacity of s1: %d\n", cap(s1)) for i := 1; i <= 17; i++ { s1 = app原创 2018-11-06 22:29:46 · 839 阅读 · 0 评论 -
golang init方法和main方法初始化顺序
golang init方法和main方法初始化顺序init()和main()方法是golang默认的两个方法,不需要我们调用,程序执行会自动寻找项目中的这俩方法。现在我们就讲一种通用的情况:main 包下 导入了 init2 包而在init2 包下又导入了init3 包,三个包下都有自己的init 方法,初始化的顺序又是怎么的呢?先看一段代码:// demo_init1.gopackag...原创 2018-10-28 22:50:54 · 4345 阅读 · 0 评论 -
Go语言条件语句、选择语句、循环语句
文章目录条件语句选择语句循环语句条件语句和其他语言类似,条件语句即为 if ,if else 等。具体有以下表达式: a := 2 b := 3 if a > b { fmt.Printf("具体操作1") } if a <= b { fmt.Printf("具体操作2") } else { fmt.Printf("具体操作3") }// if 结...原创 2019-10-22 22:35:12 · 431 阅读 · 0 评论 -
Go语言你基础数据类型
文章目录字符类型整型浮点型布尔类型字节类型字符类型Go语言中的字符串类型都是不可变类型,默认使用UTF-8编码。两种表示形式:(1)双引号表示var a = "char"//定义个字符串变量a,值为 "char"当然双引号里面也可以是转义字符,八进制表示或十六进制表示。var a = "中\n国"var b = "\x61"var c = "\142"(2)单引号表示单...原创 2019-10-21 23:14:24 · 612 阅读 · 0 评论 -
golang中new和make的区别
new 和 make的区别前言new用法make 用法前言var i intfmt.printf("i:%v",i)比如:声明一个i,不赋值直接输出,直接输出i=0,整个代码运行的过程是,先声明了一个 int 型,同时赋值i=0;(默认值,string为"",引用类型为nil)赋值的时候默认就为其分配了内存地址。总结一下:要使用一个变量就要先声明它且为其分配内存地址new用法pa...原创 2019-04-09 23:20:40 · 412 阅读 · 0 评论 -
golang之高阶函数
golang之高阶函数怎么写一个golang高阶函数怎么写一个golang高阶函数首先高阶函数也是函数,相对于普通函数还是有点区别的,区别点在于:这个函数的形参列表或返回参数列表中存在数据类型为函数类型,这就是高阶函数。看下列代码:package mainimport "fmt"type F func(int int) intfunc main() { var f F f =...原创 2019-04-07 13:40:21 · 2244 阅读 · 0 评论 -
golang 中的闭包
golang语言中的闭包什么是闭包?什么是闭包?golang中也是发生在函数之间的,就是在一个函数中存在引用外部变量的行为,我们就称这是个闭包函数。先看下面代码:求两个数的和与乘积。package mainimport "fmt"type operate func(x int, y int) intfunc main() { // 求两个数的和 operateAdd := f...原创 2019-04-07 13:39:15 · 553 阅读 · 0 评论 -
sync.once介绍
package mainimport ( "fmt" "sync" "time")func main() { o := &sync.Once{} go do(o) go do(o) time.Sleep(time.Second * 2)}func do(o *sync.Once) { fmt.Println("Start do") o.D...原创 2019-03-31 23:26:20 · 175 阅读 · 0 评论 -
sync.map介绍
这里写自定义目录标题主要方法sync.Map这个数据结构是线程安全的(基本类型Map结构体在并发读写时会panic严重错误),它填补了Map线程不安全的缺陷,不过最好只在需要的情况下使用。它一般用于并发模型中对同一类map结构体的读写,或其他适用于sync.Map的情况。主要方法它主要五个方法及其功能简介:1、Store 存 key,value2、LoadOrStore 取&am...转载 2019-03-31 23:22:30 · 512 阅读 · 0 评论 -
golang string 转 int, int64, int32
str := “123”// string 转 inti, err := strconv.Atoi(str)if err == nil {fmt.Printf(“i: %v\n”,i)}// string 转 int64i64,err := strconv.ParseInt(str,10,64)if err == nil {fmt.Printf(“i64: %v\n”,i64)...原创 2019-03-11 21:30:28 · 48077 阅读 · 3 评论 -
Go 生成(读取)xlsx文件
目录go 生成xlsx文件go 读取xlsx文件1. go生成xlsx文件github.com/xuri/excelize 下载go get github.com/xuri/excelize生成 excel 文件package mainimport "github.com/xuri/excelize"import "fmt"func main() { xlsx...原创 2019-03-07 22:59:11 · 5903 阅读 · 0 评论 -
go env 命令介绍
功能:输出 go 环境有关的信息。默认情况下环境输出格式为 shell 脚本格式(Windows上是 batch 文件形式输出)。当人你也可以再后边加上标记,按你指定格式输出,比如:go env -json GOROOT 将会以json 格式输出。{ "GOROOT": "E:\\Go"}可以看到GOROOT(golang 安装目录为:E:\Go),类似于GOROOT ...原创 2019-02-24 14:32:46 · 8248 阅读 · 0 评论 -
go list命令介绍
功能:用于输出路径包的详细信息go list 默认情况下只输出后边的路径包信息,用的最多的标记是 -f , -json,后边会说明。-json 标记,后面若跟有路径包则已 json 格式打印出代码包的结构体形式,若不写路径包,比如:go list -json 则打印出当前所在目录包中的结构体样式。其中 json 结构体输出会参照一个模板输出说明,如下:参数名类型含义Di...原创 2019-02-23 19:45:26 · 15145 阅读 · 0 评论 -
golang中defer和recover的使用
defer 内建函数,所在方法里退出是调用,一个方法里若有多个defer语句,则先声明的后被调用,一般与recover()函数一起配合使用,recover()一般用于捕捉panic抛出的异常,比如:panic(11), 捕捉到的就是11func main() { defer func() { if v := recover();v == 11 { fmt.Printf("v: %#...原创 2018-12-07 18:08:39 · 3280 阅读 · 4 评论 -
golang中&^位清空操作
c = a &^ b含义:b 转为二进制时,值为1 的位置对应c的位置值为0;c中剩余位置值与a对应位置值相同(即:所谓的位清空操作,把b中1对应位置在c位置上清空),详见下面代码package mainimport "fmt"func main() { a := 12 b := 4 c := a &^ b fmt.Printf("a: %08b\n", a)...原创 2018-12-07 16:00:59 · 3970 阅读 · 1 评论 -
go run 和 go test 命令介绍
功能:用于编译main代码包,以及运行编译后的可执行程序。原创 2019-02-20 23:55:44 · 5326 阅读 · 0 评论 -
go doc 命令介绍
一:go doc 命令介绍作用:打印出程序实体说明文档。后可不跟参数或一个参数或两个参数格式:go doc 标记 参数标记和参数可以不填,go doc在 main 包下,执行 go doc 默认是不打印的,除非加上 -cmd 标记,后面会讲在非 main 包下,执行 go doc 打印当前代码包文档及其程序实体列表(程序实体:变量、常量、函数、结构体以及接口)go ...原创 2019-02-19 21:46:10 · 5488 阅读 · 0 评论 -
go clean 命令介绍
功能:用户删除项目的缓存文件或其他命令生成的文件。会删除以下文件(但不限于以下)会删除编译go或命令源码文件而产生的文件,包括:“_obj”和“_test”目录,名称为“_testmain.go”、“test.out”、“build.out”或“a.out”的文件,名称以“.5”、“.6”、“.8”、“.a”、“.o”或“.so”为后缀的文件。比如:执行 go build -work 会生成...原创 2019-02-18 23:53:49 · 7440 阅读 · 0 评论 -
go get 命令介绍
功能: 用于下载指定的路径包并进行安装。比如:go get github.com/jinzhu/gorm 会下载并安装gorm包。命令介绍说明:标记含义-u用于下载指定的路径包及其依赖包,默认情况下,不会下载本地已经存在的,只会下载本地不存在的代码包。就是口中常说的跟新包 比如:go get -u github.com/jinzhu/gorm。会把最新的 gorm 包下载...原创 2019-02-18 22:52:06 · 10540 阅读 · 0 评论 -
go install 命令介绍
概要: go install 用于编译并安装它指定的代码包以及代码包依赖的其他包,其实 go build 的绝大多数命令都可以用于 go install 命令,也仅仅比 go build 多做了一件事,把编译好的 .a 文件(归档文件或静态链接库文件)放入到 pkg 目录下。(查看go build命令请点击)安装命令源码文件在命令源码文件中执行 go install 时,比如:项目名是pro...原创 2019-02-18 21:43:36 · 4632 阅读 · 0 评论 -
go build 命令介绍
控制台输入: go help build 会输出所有的 go build 可带的所有参数,go build 用于编译导入的包,包括import导入的包,以及这些包所依赖的其他关系包,但是并不会将编译后的结果进行安装。go build 所在包为main 包时若go build 后跟好几个.go文件,编译时会认为这几个文件是在同一个包中,且已第一个.go 文件名为输出结果.(比如:go bui...原创 2019-02-17 19:11:27 · 9672 阅读 · 0 评论 -
go目录介绍
一:工作区所谓工作区可以理解为工作空间,由你安装go时指定工作区目录,比如我的:E:\go_project 此目录就是安装go时设置的GOPATH环境变量,GOPATH 可以设置多个,每一个就是一个工作区,编译包时查询顺序是从左到右查找工作区工作区下通常有三个目录:bin、pkg、src目录,简单说:src存放源代码pkg编译后生成的文件bin编译后生成的可执行文件二:bin目录...原创 2019-02-17 15:43:36 · 1236 阅读 · 0 评论