叱咤少帅(少帅)
技术成就梦想
展开
-
Golang基础 Label标签与goto跳转
Golang基础 Label标签与goto跳转原创 2024-03-23 20:46:22 · 534 阅读 · 0 评论 -
Golang模板语法
go 模板语法原创 2023-12-13 12:41:14 · 1248 阅读 · 1 评论 -
Golang命令行库
Golang命令行库原创 2023-10-22 20:36:41 · 702 阅读 · 0 评论 -
Golang中的type关键字
Golang中的type关键字原创 2023-10-19 14:46:42 · 390 阅读 · 1 评论 -
Golang基础之内置函数
Golang基础之内置函数原创 2023-10-08 10:01:03 · 114 阅读 · 0 评论 -
Golang基础之关键字
Golang基础之关键字原创 2023-09-26 16:26:01 · 355 阅读 · 0 评论 -
Golang不同平台编译的思考
Golang不同平台编译的思考原创 2023-09-05 11:18:12 · 447 阅读 · 0 评论 -
Go语言结合zabbix检测域名的过期时间
Go语言结合zabbix检测域名的过期时间原创 2023-01-19 09:57:49 · 148 阅读 · 0 评论 -
关于Interface的几个注意项
对方法的调用限制接口是一组固定的方法集,由于静态类型的限制,接口变量有时仅能调用其中特定的一些方法。package mainimport "fmt"type Phone interface { call()}type iPhone struct { name string}func (phone iPhone)call() { fmt.Println("Hello, iPhone.")}func (phone iPhone)send_wechat()原创 2021-11-13 00:56:37 · 89 阅读 · 0 评论 -
Golang基础之Context包(二)
什么是 Context?在 Go 1.7 版本之前,context 还是非编制的,它存在于 golang.org/x/net/context 包中。后来,Golang 团队发现 context 还挺好用的,就把 context收编了,在 Go 1.7 版本正式纳入了标准库。Context,也叫上下文,它的接口定义如下:type Context interface { Deadline() (deadline time.Time, ok bool) Done() <-chan s原创 2021-11-13 00:47:00 · 271 阅读 · 0 评论 -
go中几种print的区别
golang 中的几种print的区别原创 2021-11-12 11:24:45 · 1278 阅读 · 0 评论 -
golang数据结构之间的互相转换
json和stuct之间的转换直接通过json包的Marshal与Unmarshal就可以实现其互转,需要注意的是:因为结构体会传入到Marshal,Unmarshal函数中所以字段必须是大写的才可以被别的包调用Unmarshal时因为是传入函数且是修改 ,所以需要传入的是指针;type person struct { Name string `json:"name"` Age int `json:"age"` //``是为了指定转换为对应格式的字段名。json:"age"标识原创 2021-10-31 13:52:25 · 1075 阅读 · 0 评论 -
golang疑难点记录
函数返回指针go的函数可以直接返回局部变量的指针,这主要依赖go是有runtime的语言,编译器在发现有变量可以逃逸出去的时候会在堆上分配变量而不是栈上,这样就可以返回该变量的指针了,且会使该地址的引用+1,当生命空间结束时,gc会去回收package mainimport "fmt"func test() *int { var inner int = 100 return &inner}func main() { outer := test() f原创 2021-10-30 18:33:58 · 413 阅读 · 0 评论 -
golang处理配置文件
众多配置文件中我们以toml为例进行讲解。使用单例模式进行配置原创 2021-10-30 14:36:53 · 296 阅读 · 0 评论 -
golang的json处理
golang的json处理原创 2021-10-29 16:54:38 · 527 阅读 · 0 评论 -
golang基础之context 包(一)
context原创 2021-10-29 12:40:23 · 759 阅读 · 0 评论 -
gin基础
官网json返回package mainimport ( "github.com/gin-gonic/gin" "net/http")var m1 = map[string]interface{}{ "name":"tom", "city":"cs", "sex":"男",}func main() { r:=gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(200,m1) }) r.Run()原创 2021-10-28 20:34:29 · 111 阅读 · 0 评论 -
golang模块导入以及代码复用
importgo基础语法 – importimport 语句可以导入源码文件所依赖的包不得导入源代码中没有用到的package,否则报错import 原理如果一个main导入其他包 包将被顺序导入如果导入的包依赖其他的包(包B),会首先导入B包,然后初始化B包的常量 和变量,最后如果包B只有init,会自动执行init();所有包导入之后,会初始化常量和变量最后执行main函数如果一个包被导入多次则该包只会被导入一次import 包的加载顺序常量(const) -> 变量(原创 2021-10-28 02:49:50 · 812 阅读 · 0 评论 -
gin restfull并组织化代码
背景国内比较出名的就是beego和gin,其中gin的性能优于beego,但是beego具有完整的MVC,功能比gin更多,如果不是大型应用,用gin足够了,并且gin也是golang 官网推荐的web框架。实现建表CREATE TABLE `person` ( `id` int(11) NOT NULL AUTO_INCREMENT, `first_name` varchar(40) NOT NULL DEFAULT '', `last_name` varchar(40) NOT NU原创 2021-10-28 01:23:44 · 314 阅读 · 0 评论 -
golang 数据结构之切片
切片和Java中的ArryList以及py中的list一致声明切片类型的基本语法如下:var name []T其中,name:表示变量名 T:表示切片中的元素类型func main() { // 声明切片类型 var a []string //声明一个字符串切片 var b = []int{} //声明一个整型切片并初始化 var c = []bool{false, true} //声明一个布尔切片并初始化 var d =原创 2021-10-11 10:50:21 · 366 阅读 · 0 评论 -
golang 开发环境搭建
go开发环境搭建原创 2021-10-27 18:34:38 · 453 阅读 · 0 评论 -
golang项目开发中的sync package详解
Golang sync包提供了基础的异步操作方法,包括互斥锁Mutex,执行一次Once和并发等待组WaitGroup。本文主要介绍sync包提供的这些功能的基本使用方法。WaitGroup:并发等待组Mutex: 互斥锁RWMutex:读写锁Once:执行一次Cond:信号量Pool:临时对象池Map:自带锁的mapsync.WaitGroupsync.WaitGroup指的是等待组,在Golang并发编程里面非常常见,指的是等待一组工作完成后,再进行下一组工作。sync.Wai原创 2021-10-25 21:33:54 · 487 阅读 · 0 评论 -
golang基础之函数
Golang基础之函数原创 2021-10-12 09:26:53 · 175 阅读 · 0 评论 -
golang基础之流程控制
golang的流程控制语句原创 2021-10-22 04:48:24 · 154 阅读 · 0 评论 -
go解决竞态条件的两种实现
几个概念(1) 临界区简单来说,当有多个协程或者线程修改共享资源的代码就是临界区解决竞态的方式通过 信道 和 mutex 都可以实现。信道方式(1)select使用select 用于在多个发送/接收信道操作中进行选择func process1(ch chan string) { time.Sleep(10500 * time.Millisecond) ch <- "process successful"}func main() { ch := make(chan s原创 2021-10-21 17:01:06 · 364 阅读 · 0 评论 -
golang基础之异常处理
222原创 2021-10-19 14:12:39 · 404 阅读 · 0 评论 -
golang基础之日志处理
333原创 2021-10-19 13:22:22 · 599 阅读 · 0 评论 -
golang并发编程实践
协程(Coroutine)是用户态的线程。通常创建协程时,会从进程的堆中分配一段内存作为协程的栈。线程的栈有 8 MB,而协程栈的大小通常只有 KB,而 Go 语言的协程更夸张,只有 2-4KB,非常的轻巧。协程本质是线程,所以我们可以把协程理解为线程或者轻线程。控制并发数(1) 方式1package main import ( "fmt" "sync" "time") var w sync.WaitGroup // 功能函数func gonneng() { fmt.Pr.原创 2021-10-18 12:34:55 · 333 阅读 · 0 评论 -
golang 如何等待协程结束的方式
go提供了sync包和channel来解决协程同步和通讯。(1)方式1:sync.WaitGroup是等待一组协程结束,sync.WaitGroup只有3个方法,Add()添加一个计数,Done()减去一个计数,Wait()阻塞直到所有任务完成。package mainimport ( "fmt" "sync" "time")var wg sync.WaitGroup //定义一个同步等待的组func task(i int){ fmt.Println("task...",i)原创 2021-10-18 08:55:41 · 1489 阅读 · 0 评论 -
缓冲信道和工作池
缓冲信道我们还可以创建一个有缓冲(Buffer)的信道。只在缓冲已满的情况,才会阻塞向缓冲信道(Buffered Channel)发送数据。同样,只有在缓冲为空的时候,才会阻塞从缓冲信道接收数据。通过向 make 函数再传递一个表示容量的参数(指定缓冲的大小),可以创建缓冲信道。ch := make(chan type, capacity)(1)要让一个信道有缓冲,上面语法中的 capacity 应该大于 0。无缓冲信道的容量默认为 0,因此我们在上一教程创建信道时,省略了容量参数。我们开始编写原创 2021-10-17 22:16:26 · 166 阅读 · 0 评论 -
golang基础之通道
golang基础之通道原创 2021-10-17 22:07:58 · 536 阅读 · 0 评论 -
golang基础之运算符
运算符用于在程序运行时执行数学或逻辑运算。运算符Go 语言内置的运算符有:算术运算符关系运算符逻辑运算符位运算符赋值运算符算数运算符运算符描述+相加-相减*相乘/相除%求余注意: ++(自增)和--(自减)在Go语言中是单独的语句,并不是运算符。关系运算符运算符描述==检查两个值是否相等,如果相等返回 True 否则返回 False。!=检查两个值是否不相等,如果不相等返回 True 否则返回原创 2021-10-12 10:09:40 · 170 阅读 · 0 评论 -
fmt.Printf使用详解
fmt.Printf使用指南mt标准库是我们在学习Go语言过程中接触最早最频繁的一个了,本文介绍了fmtb包的一些常用函数。fmtfmt包实现了类似C语言printf和scanf的格式化I/O。主要分为向外输出内容和获取输入内容两大部分。向外输出标准库fmt提供了以下几种输出相关函数。PrintPrint系列函数会将内容输出到系统的标准输出,区别在于Print函数直接输出内容,Printf函数支持格式化输出字符串,Println函数会在输出内容的结尾添加一个换行符。func Print(a原创 2021-10-12 09:59:06 · 1525 阅读 · 0 评论 -
golang基础之方法
方法和函数的区别原创 2021-10-12 09:55:26 · 174 阅读 · 0 评论 -
golang基础之反射
变量的内在机制Go语言中的变量是分为两部分的:类型信息:预先定义好的元信息。值信息:程序运行过程中可动态变化的。反射介绍反射是指在程序运行期对程序本身进行访问和修改的能力。程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期获取类型的反射信息,并且有能力修改它们。Go程序在运行期使原创 2021-10-12 09:53:51 · 158 阅读 · 0 评论 -
golang基础之变量和常量
变量和常量是编程中必不可少的部分,也是很好理解的一部分。标识符与关键字标识符在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名、常量名、函数名等等。 Go语言中标识符由字母数字和_(下划线)组成,并且只能以字母和_开头。 举几个例子:abc, _, _123, a123。关键字关键字是指编程语言中预先定义好的具有特殊含义的标识符。 关键字和保留字都不建议用作变量名。Go语言中有25个关键字: break default func int原创 2021-10-12 09:53:00 · 161 阅读 · 0 评论 -
golang基础之指针
要搞明白Go语言中的指针需要先知道3个概念:指针地址、指针类型和指针取值。Go语言中的指针任何程序数据载入内存后,在内存都有他们的地址,这就是指针。而为了保存一个数据在内存中的地址,我们就需要指针变量。比如,技术成就梦想 这句话是我的座右铭,我想把它写入程序中,程序一启动这句话是要加载到内存(假设内存地址0x123456),我在程序中把这段话赋值给变量A,把内存地址赋值给变量B。这时候变量B就是一个指针变量。通过变量A和变量B都能找到我的座右铭。Go语言中的指针不能进行偏移和运算,因此Go语言中的指原创 2021-10-12 09:50:30 · 174 阅读 · 0 评论 -
golang数据结构之Map
go中的map和java中的hashmap以及py中的dict一致。定义map是一种无序的基于key-value的数据结构,和切片(slice)一样,Go语言中的map是引用类型,必须初始化才能使用。map[KeyType]ValueType其中,KeyType:表示键的类型。 ValueType:表示键对应的值的类型map类型的变量默认初始值为nil,需要使用make()函数来分配内存。语法为:make(map[KeyType]ValueType, [cap])map的原创 2021-10-11 11:01:42 · 645 阅读 · 0 评论 -
golang 数据结构之字符串和数组
数组go的数组和Java的数组一支,类似py中的tuple。在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组长度不可变化。 基本语法:// 定义一个长度为3元素类型为int的数组avar a [3]int数组的初始化方式1:func main() { var testArray [3]int //数组会初始化为int类型的零值 var numArray = [3]int{1, 2} .原创 2021-10-11 10:34:03 · 1695 阅读 · 0 评论 -
golang 单元测试
go test工具Go语言中的测试依赖go test命令。编写测试代码和编写普通的Go代码过程是类似的,并不需要学习新的语法、规则或工具。go test命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录内,所有以_test.go为后缀名的源代码文件都是go test测试的一部分,不会被go build编译到最终的可执行文件中。在*_test.go文件中有三种类型的函数,单元测试函数、基准测试函数和示例函数。类型 格式 作用 测试函数 函数名前缀为Test原创 2021-10-09 08:24:58 · 195 阅读 · 0 评论
分享