Go语言中文网 为您找到相关结果 28

Golang iris 解决CORS跨域问题

先创建一个函数用来统一处理请求头 // Cors func Cors(ctx iris.Context) { ctx.Header("Access-Control-Allow-Origin", "*") if ctx.Request().Method == "OPTIONS" { ctx.Header("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,PATCH,OPTIONS") ctx.Header("Access-Control-Allow-Headers", "Content-Type, Accept, Authorization") ctx.StatusCode(204) return } ctx.Next() } 然后在初始...阅读全文

博文 2019-12-16 11:32:45 韬大帅

golang中的defer panic recover

大家都知道golang里的panic相当于其他语言里的throw,而recover相当于其他语言里的cacth,可是由于golang的recover机制要求必须在defer的函数里才能执行catch panic 大概意思如下 func protect(g func()) { defer func() { log.Println("done") // Println executes normally even if there is a panic if x := recover(); x != nil { log.Printf("run time panic: %v", x) } }() log.Println("start") g() } 这似乎跟try catch没啥区别,但是如果我们...阅读全文

博文 2014-10-04 19:26:12 HopingWhite

go 正则的使用

定义一个正则表达式 调用regexp 下面的几个方法并传入一个正则的字符串形式的参数定义一个正则表达式例如 :regexp.MustCompile("\d") Compile CompilePOSIX MustCompile MustCompilePOSIX 方法概述 regexp包中有16种方法来匹配正则表达式并标识匹配的文本,他们的名称可以使用这个正则来匹配 Find(All)?(String)?(Submatch)?(Index)? 如果存在 All 该函数将匹配整个表达式的连续非重叠匹配。方法返回的是一个包含非all 值得切片,这个方法使用一个额外的参数整数参数 n, 如果n> = 0,则该函数最多返回n个匹配项/子匹配项;否则,它返回所有匹配项/子匹配项。 如果存在 String ...阅读全文

博文 2019-10-27 21:02:39 曹飞龙

golang併發數量及超時控制

這裡介紹一個控制golang併發數量的包gowork,當然都是可以自己實現的,只是每次去實現比較麻煩罷了。 如果只是啟一個goroutine那就沒有必要使用,當然這個包也是支持的。 實現原理: 用戶告知要啟用的併發數量,然後包內會啟動相當於併發數量的一個工作池。這樣之後程序猿只要往工作池裡面發任務就可以了。 當然你需要的是實現你的worker。原型: type WorkFunction func(req interface{}, res interface{}) 還可以實現異常處理的函數,原型和worker一樣,同時在使用的時候gowork會自動將任務參數req對應的傳給異常處理函數,你需要做的是通過req獲取異常處理結果,當然你也可以不要這些結果。 使用: 控制同時併發數量為5,new一個...阅读全文

用go语言和org-mode搭建自己的博客环境

2012-12-23 用go语言和org-mode搭建自己的博客环境 设计目标 操作流程 目录格式 博文头部meta格式 功能实现 设计目标 半静态的博客。尽量是self-contain的,没有数据库依赖。只要完全基本功能。使用博文头部有元信息来分类别,tag等,go语言后台动态生成按类别浏览。 静态部分包括: css样式文件 各种显示的模板 大多数博文都是由org文件使用emacs生成的html 动态部分包括: 由go语言程序生成rss的feed 管理博文的分类,tag,等 评论等功能后期再考虑 操作流程 手写org格式的博文。文件格式有特殊头部存储博文json格式的meta信息。然后用emacs加工,将org文件转化为html导入到pub/post目录,只生成body部分。 go语言写后...阅读全文

博文 2015-03-16 11:50:39 zenlife

golang[函数篇]

package main func average(values []float64) float64{ if len(values) == 0{ return 0 } sum := 0.0 for _,value := range(values){ sum += value } return sum/float64(len(values)) } func main(){ value := []float64{10,10,12,14,15} println(average(value)) } package main func swap(a,b int)(int,int){ if(a阅读全文

博文 2014-10-04 19:26:06 xloogson

用go语言和org-mode搭建自己的博客环境

2012-12-23 用go语言和org-mode搭建自己的博客环境 设计目标 半静态的博客。 尽量是self-contain的,没有数据库依赖。只要完全基本功能。 使用博文头部有元信息来分类别,tag等,go语言后台动态生成按类别浏览。 静态部分包括: css样式文件 各种显示的模板 大多数博文都是由org文件使用emacs生成的html 动态部分包括: 由go语言程序生成rss的feed 管理博文的分类,tag,等 评论等功能后期再考虑 操作流程 手写org格式的博文。文件格式有特殊头部存储博文json格式的meta信息。 然后用emacs加工,将org文件转化为html导入到pub/post目录,只生成body部分。 go语言写后台,将pub/post目录的文件结合template/p...阅读全文

博文 2015-03-16 11:49:36 zenlife

golang函数方法

定义 Go 语言中同时有函数和方法。一个方法就是一个包含了接受者的函数,接受者可以是命名类型或者结构体类型的一个值或者是一个指针。所有给定类型的方法属于该类型的方法集。语法格式如下: func (variable_name variable_data_type) function_name() [return_type]{ /* 函数体*/ } package main import "fmt" type Circle struct { radius float64 } func main() { var c Circle c.radius = 10 fmt.Println("圆的面积 = ", c.getArea()) } func (c Circle) getArea() float64...阅读全文

博文 2019-12-31 06:32:42 程序小白菜

golang tips

回调函数的用法 //一个记录日志的类型:func(string) type saveLog func(msg string) //将字符串转换为int64,如果转换失败调用saveLog func stringToInt(s string, log saveLog) int64 { if value, err := strconv.ParseInt(s, 0, 0); err != nil { log(err.Error()) return 0 } else { return value } } //记录日志消息的具体实现 func myLog(msg string) { fmt.Println("Find Error:", msg) } func main() { stringToInt(...阅读全文

博文 2014-10-04 19:26:45 kuerant

Golang Interface & Function 对象扩展

Interface & Function 对象扩展 Golang 的函数即对象,和 JavaScript 一样,像结构体可以定义方法一样,函数对象也可定义方法。 package main import ( "fmt" ) type adder interface { add(string) int } type handler func(name string) int // 函数即对象,和 JavaScript 一样 func (h handler) add(name string) int { // 实现函数对象的 handler.add() 方法 value := h(name) + 1 fmt.Printf(`handler.add("%v") %v %s`, name, value...阅读全文

博文 2019-10-02 19:32:46 aside section ._1OhGeD

go 回调函数 & 匿名函数

package main import "fmt" // go 回调函数 func main() { /* 匿名: 没有名字 匿名对象: 匿名函数: 函数没有名字 通常只能使用一次。 定义的时候直接使用 */ fun1 := func(a, b int) int { fmt.Println("a:", a, "b:", b) return a * b } res2 := oper(1, 2, fun1) fmt.Println(res2) // 3 } func oper(m, n int, fun func(int, int) int) int { return fun(1, 2) ...阅读全文

博文 2020-06-07 16:32:43 小兵

golang函数闭包

定义 Go 语言支持匿名函数,可作为闭包。匿名函数是一个"内联"语句或表达式。匿名函数的优越性在于可以直接使用函数内的变量,不必申明 package main import "fmt" func getSequence() func() int { i := 0 return func() int { i += 1 return i } } func main() { /* nextNumber 为一个函数,函数 i 为 0 */ nextNumber := getSequence() /* 调用 nextNumber 函数,i 变量自增 1 并返回 */ fmt.Println(nextNumber()) fmt.Println(nextNumber()) fmt.Println(next...阅读全文

博文 2019-12-31 06:32:42 程序小白菜

golang构造函数

package main import "fmt" /** * 构造函数 * 上班类 */ type Work struct { opts options } type options struct { startTime string lunchTime string endTime string } var ( lunTimeDefault = "中午十二点" ) type Option func(o *options) func StartTime(s string) Option { return func(opts *options) { opts.startTime = s } } func EndTime(s string) Option { return func(opts ...阅读全文

博文 2019-12-21 01:32:41 Cazy

golang 函数定义

函数的定义 第一种 关键字 函数名(参数1 参数1类型,参数2 参数2类型……) 返回值 返回值类型 (可选){ 函数体 } 例子: func func_name(arg1 type_data, arg2 type_data……) return_val return_val_type { 函数体 } 第二种 关键字 函数名(可变长参数列表... 可变长参数列表类型) 返回值 返回值类型 (可选){ 函数体 } 例子: func func_name(args... args_list_type) return_val return_val_type { 函数体 ...阅读全文

博文 2020-04-05 02:32:43 小麦客

defer+返回函数值的语句会立即执行的疑问

有这么一个简单的调试用函数,返回一个函数值 func trace(s string) func() { startTime := time.Now() log.Printf("enter %s ", s) return func() { log.Printf("exit %s (%s)", s, time.Since(startTime)) } } func foo(){ fmt.Println("1 ") defer trace("calculate")() fmt.Println("2 ") } 输出结果是 1 2018/02/09 15:11:43 enter calcula...阅读全文

golang 简单函数耗时打点

简单方式 package main import( "fmt" "time" ) func main(){ defer timeCost(time.Now()) fmt.Println("start program") time.Sleep(5*time.Second) fmt.Println("finish program") } func timeCost(start time.Time){ terminal:=time.Since(start) fmt.Println(terminal) } 更优雅的方式 func timeCost() func() { start := time.Now() return func() { tc:=time.Since(start) fmt.Prin...阅读全文

博文 2020-05-21 19:32:46 夜空一起砍猩猩

为什么golang没有min/max以及三元操作符

目前为止最恨的golang的这个缺失属性,这个功能很常用,绝大部分高级语言都支持,为毛golang不提供呢? 虽然math库里面有min(float, float) float的函数,但没有针对int的,实际上常用的就是int。 每次我都得自己在项目的common模块里自己定义这两个函数。 package main import ( "fmt" ) // Define ternary operate function func ternary(expr bool, whenTrue, whenFalse interface{}) interface{} { if expr == true { return whenTrue } return whenFalse } // Define min...阅读全文

博文 2020-01-11 14:32:45 CodingCode

Golang 分页函数

//分页方法,根据传递过来的页数,每页数,总数,返回分页的内容 7个页数 前 1,2,3,4,5 后 的格式返回,小于5页返回具体页数func Paginator(page, prepage int, nums int64) map[string]interface{} { var firstpage int //前一页地址 var lastpage int //后一页地址 //根据nums总数,和prepage每页数量 生成分页总数 totalpages := int(math.Ceil(float64(nums) / float64(prepage))) //page总数 if page > totalpages { page = totalpages } if page <= 0 { ...阅读全文

博文 2019-08-27 17:32:52 灰侠_bf44

go语言基础之append函数的使用

向切片追加元素 为切片追加新的元素是种常用的操作,为此 Go 提供了内建的append函数。内建函数的文档对此函数有详细的介绍。 func append(s []T, vs ...T) []T append的第一个参数s是一个元素类型为T的切片,其余类型为T的值将会追加到该切片的末尾。 append的结果是一个包含原切片所有元素加上新添加元素的切片。 当s的底层数组太小,不足以容纳所有给定的值时,它就会分配一个更大的数组。返回的切片会指向这个新分配的数组。 package main import "fmt" func main() { var s []int printSlice(s) // 添加一个空切片 s = append(s, 0) printSlice(s) // 这个切片会按需增...阅读全文

博文 2020-06-02 18:32:51 小兵

golang构造函数

package main import "fmt" /** * 构造函数 * 上班类 */ type Work struct { opts options } type options struct { startTime string lunchTime string endTime string } var ( lunTimeDefault = "中午十二点" ) type Option func(o *options) func StartTime(s string) Option { return func(opts *options) { opts.startTime = s } } func EndTime(s string) Option { return func(opts ...阅读全文

博文 2019-12-21 06:32:45 charley_z

golang 切片在函数传递

背景: 切片当参数传递时,无法append package main func test(a []int){ a=append(a,1,2,3) // print [89 4 5 6 1 2 3] } func main(){ var s []int=[]int{89,4,5,6} test(s) fmt.Println(s) } 原因: go语言中切片是地址传递,test函数添加的1,2,3后被分配了新的地址,s切片还是指向原来的地址,a和s内存地址不一样 image.png 解决方法:推荐方法2 1.在test函数返回新的切片,main函数接受返回结果 package main import "fmt" func test(a []int)(b []int){ b=append(a,1,...阅读全文

博文 2020-06-03 11:33:00 jojo1313

GO的第八天,函数多返回值

多返回值 在Go中,一个函数可以返回多个值,这和其他编程语言有很大的不同。对于我们这些有编程经验的人来说,学习这个特性不难,而是很难想到去使用这个特性。 举个简单的例子: package main import "fmt" func swap(a int, b int) (int, int){ return b, a } func main() { a := 1 b := 2 a, b = swap(a, b) fmt.Println(a, b) } 上面这个简单的交换两个数值的例子,可以简单的理解多返回值。 还有一种多返回值的写法,就是函数将所有的返回值都显示定义,那么该函数的return语句可以省略操作数。这种我们称之为 bare return。 func swap(a int, b i...阅读全文

【golang】利用反射为函数执行封装一些额外操作

可以利用此函数,全局改变函数输入输出 func ExecuTime(f interface{}, params ...interface{}) { funcValue := reflect.ValueOf(f) paramList := make([]reflect.Value, 0) for _, v := range params { paramList = append(paramList, reflect.ValueOf(v)) } start := time.Now() funcValue.Call(paramList) dur := time.Since(start) fmt.Println(dur) ...阅读全文

博文 2020-04-30 21:32:53 dongzaidong

golang延迟调用函数defer

defer语句被⽤于预定对⼀个函数的调⽤。可以把这类被defer语句调⽤的函数称为延迟函数。 延迟的函数是按照后进先出(LIFO)的顺序执行 defer的作用 * 释放占用资源 * 捕捉异常状态 * 输出日志 func ReadWrite() bool { file.Open("file") defer file.Close() //file.Close() 被添加到了 defer 列表 // 做一些工作 if failureX { return false //Close() 现在自动调用 } if failureY { return false //这里也是 } return true //And here ...阅读全文

博文 2019-12-31 06:32:41 程序小白菜