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

Golang sync.WaitGroup的用法

0x01 介绍经常会看到以下了代码: 12345678910111213package mainimport ( "fmt" "time")func main(){ for i := 0; i < 100 ; i++{ go fmt.Println(i) } time.Sleep(time.Second)} 主线程为了等待goroutine都运行完毕,不得不在程序的末尾使用time.Sleep() 来睡眠一段时间,等待其他线程充分运行。对于简单的代码,100个for循环可以在1秒之内运行完毕,time.Sleep() 也可以达到想要的效果。 但是对于实际生活的大多数场景来说,1秒是不够的,并且大部分时候我们都无法预知for循环内代码运行时间的长短。这时候就不能使用time.Sleep() 来...阅读全文

博文 2018-05-17 09:54:29 马谦的博客

go语言:flag的使用

go语言flag的使用 package main import ( "flag" "fmt" ) var music_file *string = flag.String("file", "musicfile", "Use -file ") func main() { flag.Parse() fmt.Println(*music_file) } 例如文件为flagTest.go go run flagTest.go -file "../music/sun.mp3" 即可指定file参数的值。 如果直接使用go run flagTest.go -file则会提示你-file的使用说明.-file="musicfile": Use -file 如...阅读全文

博文 2014-10-21 23:00:00 x369201170

windows下gopath设置

下载了go语言的安装包, 然后安装, 装完了需要设置三个地方: 1. 在windows的PATH变量中添加go的可执行文件所在的目录: [javascript] view plaincopy PATH=C:\Go\bin;其他设置; 2. 设置 GOROOT , 这个好理解, 直接设置成 C:\Go 即可 [javascript] view plaincopy GOROOT=C:\Go 3. 设置GOPATH, 这个很难理解, 我的尝试: [python] view plaincopy GOPATH= #就是等于空, 这个是可以在系统环境变量中设置的, 结果报错go get 包的时候报错说$GOPATH未设置 GOPATH=; #就是等于一个分号(;), go get 包开始可以运行, 不报...阅读全文

博文 2015-02-14 03:00:01 rojas

golang实现http的get和post

golang要请求远程网页,可以使用net/http包中的client提供的方法实现。查看了官方网站有一些示例,没有太全面的例子,于是自己整理了一下。 get请求 get请求可以直接http.Get方法,非常简单。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 func httpGet() { resp, err := http.Get("http://www.01happy.com/demo/accept.php?id=1") if err != nil { // handle error } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { // handle ...阅读全文

博文 2016-11-17 02:00:03 徐学良

golang模板语法简明教程

【模板标签】 模板标签用"{{"和"}}"括起来 【注释】 {{/* a comment */}} 使用“{{/*”和“*/}}”来包含注释内容 【变量】 {{.}} 此标签输出当前对象的值 {{.Admpub}} 表示输出Struct对象中字段或方法名称为“Admpub”的值。 当“Admpub”是匿名字段时,可以访问其内部字段或方法,比如“Com”:{{.Admpub.Com}} , 如果“Com”是一个方法并返回一个Struct对象,同样也可以访问其字段或方法:{{.Admpub.Com.Field1}} {{.Method1 "参数值1" "参数值2"}} 调用方法“Method1”,将后面的参数值依次传递给此方法,并输出其返回值。 {{$admpub}} 此标签用于输出在模板中定义...阅读全文

博文 2015-05-13 12:00:01 ____追梦人

go语言函数作为参数传递

go语言函数作为参数传递,目前给我的感觉几乎和C/C++一致。非常的灵活。 import "fmt" import "time" func goFunc1(f func()) { go f() } func goFunc2(f func(interface{}), i interface{}) { go f(i) } func goFunc(f interface{}, args... interface{}) { if len(args) > 1 { go f.(func(...interface{}))(args) } else if len(args) == 1 { go f.(func(interface{}))(args[0]) } else { go f.(func())() }...阅读全文

博文 2015-04-03 03:00:00 rojas

Go语言的参数解析(flag)

flag参数解析,我原以为会了,结果今天发现,原来比我印象中还强大些. 索性记一下. 第一个例子是常见用法: //Flag例1 //author:Xiong Chuan Liang //date:2015-4-10 package main import ( "flag" "fmt" "os" ) var ( levelFlag = flag.Int("level", 0, "级别") bnFlag int ) func init() { flag.IntVar(&bnFlag, "bn", 3, "份数") } func main() { flag.Parse() count := len(os.Args) fmt.Println("参数总个数:",count) fmt.Println("...阅读全文

博文 2015-04-14 19:00:10 xcltapestry

golang os.Args

package main import( "os" "fmt" ) func main(){ if len(os.Args)!=0{ fmt.Println(os.Args[0])// args 第一个片 是文件路径 } fmt.Println(os.Args[1]) // 第二个参数是, 用户输入的参数 例如 go run osdemo01.go 123 } /* 结果 C:\Users\lyl\AppData\Local\Temp\go-build048711186\command-line-arguments\_obj\exe\osdemo01.exe 123 *...阅读全文

博文 2017-11-15 09:03:06 304158

Go语言的传参和传引用

传参和传引用的问题 很多非官方的文档和教材(包括一些已经出版的图书), 对Go语言的传参和引用的讲解 都有很多问题. 导致众多Go语言新手对Go的函数参数传参有很多误解. 而传参和传引用是编程语言的根本问题, 如果这个问题理解错误可能会导致很多问题. 传slice不是传引用! 首先, Go语言的函数调用参数全部是传值的, 包括 slice/map/chan 在内所有类型, 没有传引用的说法. 具体请看Go语言的规范: After they are evaluated, the parameters of the call are passed by value to the function and the called function begins execution. from: ht...阅读全文

博文 2015-09-14 14:00:31 future_challenger

探究golang接口

今天看了《Go 语言中的方法,接口和嵌入类型》所以想对比以前对C/C++相关知识进一步理解golang的接口、指针、参数传递。 接口 根据《Go 语言中的方法,接口和嵌入类型》的描述可以看出,接口去调用结构体的方法时需要针对接受者的不同去区分,即: 接收者是指针*T时,接口实例必须是指针 接收者是值 T时,接口实力可以是指针也可以是值 接口的定义和类型转换与接收者的定义是关联的 文章中的示例是通过接口作为函数参数的方式展现的,这里我直接使用变量来进行实验: package main import "fmt" type Type struct { name string } type PType struct { name string } type Inter iInterface { po...阅读全文

博文 2015-03-13 16:00:02 cnsword

golang执行linux命令

golang exec 执行系统命令 golang 2014-09-25 13:17:44 2779 0 0 exec.Command() 最简单的方法: cmd := exec.Command("/bin/sh/", "-c", "linux命令") 或复杂的, 各个参数都要单独写 cmd := exec.Command("ls", "-l", "-a") package main import ( "bytes" "fmt" "os/exec" ) func main() { in := bytes.NewBuffer(nil) cmd := exec.Command("sh") cmd.Stdin = in go func() { in.WriteString("echo hello ...阅读全文

博文 2016-08-31 17:00:02 zhangym

go语法:channel作为参数的传递

在声明channel对象的参数时,一定要写成 c chan xxx,xxx代表channel的类型。例如 package main import ( "fmt" //"time" ) func main() { c := make(chan bool, 1) for i := 0; i < 10; i++ { go Go(c, i) } <-c } func Go(c chan bool, index int) { sum := 0 for i := 0; i < 1000000; i++ { sum += i } fmt.Println(sum) c <- true } 这里的chan C变量是bool类型,所以需要在声明方法的参数时,也要加上这个bool类型。 这点跟java有所不同,刚...阅读全文

博文 2015-06-18 09:03:53 x369201170

golang时间格式化

golang中如何输入当前时间 package main import( "fmt" "time" ) func main(){ t := time.Now() y,m,d := t.Date() today := time.Now().Format("2006-01-02") datetime := time.Now().Format("2006-01-02 15:04:05")//后面的参数是固定的 否则将无法正常输出 fmt.Println("time is : ",t ) fmt.Println("y m d is : ",y,m,d ) fmt.Println("now is :",today) fmt.Println("now is :",datetime) ...阅读全文

博文 2015-06-17 20:04:06 herohenu

golang http请求数据怎么传body体参数

```res, err := http.PostForm("https://127.0.0.1:8443/api/test.action", req.Form)``` 通过http.PostForm可以请求到地址,但是参数不是以body体传过去,是还要设置什么吗?学生党不太了解... ``` {"baseId":["16149460-5984-4ea0-9308-835b804d063f"],"datetime":["20170401"],"userId":["51"]} {"code":1,"data":"parse param failed","errorMsg":"网络异常"} ``` ***req.Form***中有这些参数,接口是只接收body体的请求,如果bo...阅读全文

go环境变量配置 (GOROOT和GOPATH)的区别和含义

GOROOT就是go的安装路径在~/.bash_profile中添加下面语句:GOROOT=/usr/local/goexport GOROOT当然, 要执行go命令和go工具, 就要配置go的可执行文件的路径:操作如下:在~/.bash_profile中配置如下:export $PATH:$GOROOT/bin如果是windows需要使用;符号分割两个路径, mac和类unix都是用:符号分割GOPATH:go install/go get和 go的工具等会用到GOPATH环境变量.GOPATH是作为编译后二进制的存放目的地和import包时的搜索路径 (其实也是你的工作目录, 你可以在src下创建你自己的go源文件, 然后开始工作)。GOPATH之下主要包含三个目录: bin、pkg、s...阅读全文

golang中的hmac验证应该怎样写

python是这样的 一般hmac验证需要两个参数,一个密钥和一个加密串(既接口参数值的拼接) import hmac hmacStr=hmac.new('密钥') hmacStr.update('加密串') hmacStr=hmacStr.hexdigest() 或者是 hmac.new(__api_secret, params, digestmod=hashlib.sha512).hexdigest() 在golang中应该怎样写?我到处都找不到例子和相关的用...阅读全文

go语言:函数参数传递详解

参数传递是指在程序的传递过程中,实际参数就会将参数值传递给相应的形式参数,然后在函数中实现对数据处理和返回的过程。比较常见的参数传递有:值传递,按地址传递参数或者按数组传递参数。 1、常规传递 使用普通变量作为函数参数的时候,在传递参数时只是对变量值得拷贝,即将实参的值复制给变参,当函数对变参进行处理时,并不会影响原来实参的值。 例如: package main import ( "fmt" ) func swap(a int, b int) { var temp int temp = a a = b b = temp } func main() { x := 5 y := 10 swap(x, y) fmt.Print(x, y) } 输出结果:5 10 传递给swap的是x,y的值得拷贝...阅读全文

博文 2016-07-03 02:00:01 chase-wind

golang中的函数参数值传递和引用传递

在golang中函数的参数默认为 **按值传递**,即在函数内部修改传入参数的值是函数外部传入值的 **拷贝**。 如果想要使用引用传递,需要将传入的参数设置为 **指针类型**。 如果传入的参数数据很大,建议使用指针类型,减少内存因拷贝参数而占用。 ``` type person struct{ Name string Age int } func SetName(p person, name string){ p.Name = name } func SetNameByPointer(p *person, name string){ p.Name = name } func(p person) SetPersonName(name string){ p.Name = name } fun...阅读全文

博文 2018-11-06 17:54:02 lijingtian

go语言函数参数与返回值示例,数组的简单应用

go语言函数参数与返回值示例,数组的简单应用 package main import "fmt" func main() { string1 ,string2 :=test_various_values(30,58) fmt.Println("参数1 ",string1) fmt.Println("参数2 ",string2) fmt.Println("------------------------------------------------------------------") v1 ,v2 :=test_various_values2(46,"huangmao") fmt.Println("--v1==== ",v1) fmt.Println("---v2 == ",v2) fm...阅读全文

博文 2016-10-26 17:00:01 qq_26337701

golang中string与byte的转换

某些场景下,函数参数需要byte类型的,已知参数是string类型的,那怎么由string类型转换成byte类型呢,比如:bufio.ReadSlice的第二个参数就是byte类型的:func(b *Reader)ReadSlice(delimbyte) (line []byte, errerror)可以通过两个方法由string得到byte,第一个是: 注意到,这里的G既不是""双引号又不是``这种go里面字符串引起来的,而是普通的单引号。第二种方法是: 这种曲折的方法,先转成[]byte,然后再取第一个...阅读全文

Go命令行参数解析flag包

go语言提供的flag包可以解析命令行的参数,代码: package main import ( "flag" "fmt" ) func main() { //第一个参数,为参数名称,第二个参数为默认值,第三个参数是说明 username := flag.String("name", "", "Input your username") flag.Parse() fmt.Println("Hello, ", *username) } 编译: go build flag.go 运行: ./flag -name=world 输出: Hello, world 如果不输入name参数: ./flag 则输出: Hello...阅读全文

博文 2015-06-02 03:00:16 baiyuxiong

golang flag包

go flag 包用来解析命令行参数,通过一个简单的例子来了解下 package main import ( "flag" "fmt" ) func main() { //参数1:命令行传递参数的名称 参数2:默认值 参数3:参数的说明 username := flag.String("name", "", "Input your name") //注意 username 是string 的指针 type: *string // 在例如: // var ip = flag.Int("flagname", 1234, "help message for flagname") //ip 的类型是: *int flag.Parse() fmt.Println("Hello,", *username...阅读全文

博文 2016-01-15 03:00:00 davin

Golang中JSON解析结构体

一、StructTag介绍StructTag是go语言结构体中的一个标记字段,放在字段声明的后面,一般只有特定情况下会用到,如json的转化。 使用的时候只要把标记的字段用两个包起来即可,标签内的语法形式通常为key:”value”` ,多个标记用空格隔开。 1234type tagTest struct { tagA string `TagA` tagB int `TagB`} 二、Struct转Json要想把struct转化成json,只要把结构体内的字段名设置成导出状态,也就是把首字母大写就行了,默认情况下,转化后的json中的key值和结构体中的字段名是一样的。 1234567891011121314151617181920212223package mainimport ( "fm...阅读全文

博文 2018-05-17 09:27:59 马谦的博客

windows上GOROOT和GOPATH的设置

下载了go语言的安装包, 然后安装, 装完了需要设置三个地方: 1. 在windows的PATH变量中添加go的可执行文件所在的目录: PATH=C:\Go\bin;其他设置; 2. 设置 GOROOT , 这个好理解, 直接设置成 C:\Go 即可 GOROOT=C:\Go 3. 设置GOPATH, 这个很难理解, 我的尝试: GOPATH= #就是等于空, 这个是可以在系统环境变量中设置的, 结果报错go get 包的时候报错说$GOPATH未设置 GOPATH=; #就是等于一个分号(;), go get 包开始可以运行, 不报错, 最后还是报错, 说$GOPATH未设置 GOPATH=C:\Go 或者GOPATH=C:\Go; #go get 包报错, 说$GOPATH不能设置成和G...阅读全文

GO语言学习笔记(一)

每个Go源码文件开头都是package声明,表示Go代码所属的包要生成Go的可执行程序,需要定义一个main的包,同时创建main目录外部参数传入用os模块的os.Args方法获取,os.Args接收的参数下标从1开始 package main import ( "fmt" "os" ) func main(){ fmt.Println("Hello Test") fmt.Println(os.Args[1]) } 在函数返回时没有被明确赋值的返回值会被设置成默认值,例如float类型返回值会被设置成0.0,error类型返回值会被设置成为nil6g和6l是64为版本的Go编译器和链接器,32为版本的编译器和连接器是8g和8l,gcc版本的编译器是gccgo 6g helloworld.go...阅读全文

博文 2014-10-11 13:00:06 YaphetS_xiaoyang

go gdb调试 参数设置

编译时,如果编译的结果需要gdb调试则使用参数-gcflags “-N -l”,这样可以忽略Go内部做的一些优化,聚合变量和函数等优化. go build -gcflags "-N -l",但是一定要注意是不是小写的i,也不是大写的I,是小写的L,不然会出现奇怪的错误。 如果编译的结果需要发布.则使用-ldflags “-s”,可以去掉调试信息,减小大约一半的大小 go build -ldflags "-s" 删除调试符号:go build -ldflags “-s -w” -s: 去掉符号信息。-w: 去掉DWARF调试信息。 关闭内联优化:go build -gcflags “-N -l...阅读全文

Golang 多变参数

// code by shaoyongyang package main import ( "fmt" ) var t int = 1 var fslice []int func main() { doSomeThing(1, 2, 3, 4) return } func doSomeThing(arg ...int) { fmt.Println(arg) // as a slice fslice := []int(arg) fmt.Println(fslice[2]) } var fslice[] int 在这里声明了一个类似“动态数组”的变量。 没有长度的限制 可变参数的类型是int。 只能传递可转换的数据。 比如我可以传递doSomeThing(1, 'A', 3, 4) 'A'的AS...阅读全文

博文 2015-01-31 19:00:01 未来还没来

ionic 路由使用$state.go父页面向子页面传递参数

1.父页面的路由配置 .state('tab.article', { url: '/article', nativeTransitions: { type: "fade" }, views: { 'tab-article': { templateUrl: 'templates/article/article.html', controller: 'ArticleController' } } })2.子页面的路由配置 .state('tab.article_details', { url: '/article_details?articleDetailsUrl', views: { 'tab-article': { templateUrl: 'templates/article/articl...阅读全文

博文 2016-09-06 17:00:07 hunannanhu

golang – fmt 格式化参数

文 基本 %v the value in a default format when printing structs, the plus flag (%+v) adds field names %#v a Go-syntax representation of the value %T a Go-syntax representation of the type of the value %% a literal percent sign; consumes no value The default format for %v is: bool: %t int, int8 etc.: %d uint, uint8 etc.: %d, %#x if printed with %#v floa...阅读全文

博文 2017-04-30 12:00:24 中柠檬

GO语言练习:不定参数函数

1、代码 2、运行 1、代码 package main import "fmt" func MyPrintf(args ...interface{}){ for _, arg := range args { switch arg.(type) { case int : fmt.Println("\"", arg, "\"", "is an int value.") case string : fmt.Println("\"", arg, "\"", "is a string value.") case int64 : fmt.Println("\"", arg, "\"", "is an int64 value.") default : fmt.Println("\"", arg, "\""...阅读全文

博文 2015-07-05 03:00:01 fengbohello

Go语言入门(四)——不定参数

不定参数类型 不定参数是指函数传入的参数个数为不定数量。 package main import ( "fmt" ) /* 不定参数函数 */ func Add(a int, args ...int) (result int) { result += a for _, arg := range args { result += arg } return } func main() { fmt.Println(Add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) } 代码中的args是一个数组切片,而且只能放在参数中的最后面。 不定参数的传递 func SetData(args ...int) (result int) { //不定参数的传递 return Add(1, ar...阅读全文

博文 2016-02-16 10:00:00 jaykiller123

GoLang中如何使用多参数属性传参

我们常常因为传入的参数不确定而头疼不已,golang 为我们提供了接入多值参数用于解决这个问题。但是一般我们直接写已知代码即所有的值都知道一个一个塞进去就好了,但是绝大部分我们是得到用户的大量输入想通过循环传入,但是这样发现无法使用这个多值参数的功能。其实底层实现将多个参数视为传入的一个不定长数组。那么我们就有想法了:既然底层使用数组,那我们传入数组是否可以,结论是不可以的,或者这样说比较合理:数组不能直接传入,需要辅助多参数标识来指明,具体让我们看以下一个简单的测试: func TestMultiParam(t *testing.T) { valueArray := []string{"1", "2", "3", "4", "5"} result := valueArray[0: 3] t...阅读全文

博文 2017-09-25 16:30:00 grimm

golang内置数据类型作为函数参数

先上结论 golang的所有内置类型作为函数参数传递都是传值的方式(没有传递引用一说),需要注意的是:数组、slice和map作为函数参数时也是传值,但是如果对结构内元素进行的修改,修改的是原数据。如果是对其进行整体赋值,则不会修改原数据,相当于拷贝出一个新的临时变量。要想无论什么情况都修改原数据,可以通过传递指针参数实现。 来段实例代码 1 package main 2 3 import ( 4 "bytes" 5 "fmt" 6 "strings" 7 ) 8 9 func f_1(a int) { 10 a = 2 11 } 12 13 func f_1_1(a *int) { 14 *a = 2 15 } 16 17 func f_2(s string) { 18 s = "cba"...阅读全文

博文 2016-06-29 02:00:01 borey

简洁高效的 Go web 框架Faygo

Faygo以全新的架构实现,它面向Handler接口开发,是支持智能参数映射与校验、支持自动化API文档的Go语言web框架。 v1.0 Go Version ≥1.8 方式一 源码下载 方式二 部署工具 ([Go to fay](https://github.com/henrylee2cn/fay)) 面向Handler接口开发(func or struct),中间件与操作完全等同可任意拼接路由操作链 支持用struct Handler在Tag标签定义请求参数信息及其校验信息 支持自动构建API文档(swagger2.0) 支持多种网络类型: HTTP HTTPS/HTTP2(TLS) HTTPS/HTTP2(Let's Encrypt TLS) HTTPS...阅读全文

问个os.exec 执行windows 下命令的问题

我在windows 目录下面有个cwRsync_5.4.1 的包 path="/cygdrive/c/null/ /cygdrive/c/data/20140101" cmd := exec.Command("cmd", "/C", "C:\\cwRsync_5.4.1\\rsync.exe", "-av", "--delete", path) cmd := exec.Command("C:\\cwRsync_5.4.1\\rsync.exe", "-av", "--delete", path) 都执行无效果。 我拿cmd.Args() 的 里面的参数,在windows 下执行是好的。 另外我也试过了cmd.Start() cmd.Run() 都不可以。。。。...阅读全文

golang 类型断言与反射

session("user")是在另一个页面设置的,存储了一个models.User类型的struct var user models.User u := this.GetSession("user") 获得session user,这里u是一个interface user = u.(models.User) 类型断言,我断言这个U的类型就是models.User类型的,然后我把他赋值给另一个models.User类型的变量 fmt.Println(user.Id) 这里我就可以访问session user的值了 u := this.GetSession("user") //取得一个interface v := reflect.ValueOf(u)//反射得到这个变量的类型 fmt.Prin...阅读全文

博文 2014-10-04 19:27:28 别人说我名字很长

用过beego ORM框架的大神进来看看

用了beego的orm框架,发现会对表名全部转换成小写了。而我的数据库中的表名是T_UserInfo,经过GO转换之后变成了t_userinfo了。而我的数据库对表名大小写是敏感的,如果设置成不敏感,那么对以前的一些服务程序会有影响,所以想问一下这个ORM可以设置表名不自动转换吗? stament.QueryTable("TUserinfo").Filter("id", id).One(&data...阅读全文

beego多级路由导致页面不能正常加载css样式

(1)路由设置:beego.Router("/index",&controller{}) (2)controller的Get()方法:this.TplName="index.html" (3)其中index.html位于views文件夹下,引用了位于static文件夹下的css,"./static/css/xxxxx; 此时访问/index路径能正常加载css显示index.html页面。 (4)如果把路由设置成beego.Router("admin/index",&controller{}),其他不变,访问admin/index时则不能正常显示index.html页面. (5)检查页面元素时发现index.html页面加载的css路径位于admin/static/css/xxxx...阅读全文

go的switch case

可以一个case带几个参数: var i = 0 switch i { case 0, 1: fmt.Println(“1”) case 2: fmt.Println(“2”) default: fmt.Println(“def”) } 默认有break效果,要取消就加上fallthrough: var i = 0 switch i { case 0: fallthrough case 1: fmt.Println(“1”) case 2: fmt.Println(“2”) default: fmt.Println(“def”) } case还可以是表达式: var i = 0 switch { case i > 0 && i < 10: fmt.Println(“i > 0 and i <...阅读全文

博文 2019-01-22 18:35:15 梁十八

beego.InsertFilter过滤器

beego.InsertFilter过滤器是为某些router提供过滤功能,可以设置在某个路由访问时进行额外的操作。通过参数设置可以设置过滤器执行的时刻。 如下所示beego.InsertFilter有一下几个参数: InsertFilter(pattern string, pos int, filter FilterFunc, params …bool) pattern:路由规则,过滤器作用的路由 pos : 过滤器执行的时刻,有以下5种 beego.BeforeStatic beego.BeforeRouter 访问路由之前 beego.BeforeExec 访问路由之后执行controller之前 beego.AfterExec 执行controller之后调用 beego.Finis...阅读全文

博文 2018-09-11 10:13:11 JimPang

Golang用body来get或post数据

用body来处理参数,能处理多层结构化参数,url不能传送多层结构数据 // 基础方法,这里多用于访问webapi,配合上json转换。此方法可以运行但是不算完善。 func httpDo(method string, url string, msg string) { fmt.Println("----", url, "----") client := &http.Client{} body := bytes.NewBuffer([]byte(msg)) req, err := http.NewRequest(method, url, body) if err != nil { // handle error } req.Header.Set("Content-Type", "applic...阅读全文

博文 2018-05-22 11:33:08 捍卫机密

golang学习的点点滴滴:指针,地址,形参,实参

学习Go语言的过程中,会发现它的指针,地址,还有函数参数跟平常我们理解的不太一样. 上代码: package main //学习指针用法 import ( "fmt" ) func main() { var i int; // i 的类型是int型 var p *int; // p 的类型是[int型的指针] i = 1; // i 的值为 1; p = &i; // p 的值为 [i的地址] fmt.Printf("i=%d;p=%d;*p=%d\n",i,p,*p); *p = 2; // *p 的值为 [[i的地址]的指针](其实就是i嘛),这行代码也就等价于 i = 2 fmt.Printf("i=%d;p=%d;*p=%d\n",i,p,*p); i = 3; // 验证我的想法 ...阅读全文

博文 2014-10-04 19:27:24 亓斌哥哥

golang 进程出现too many open files的排查过程

1. 现象 服务的cpu跑满(golang实现), 并大量报too many open files错误.服务使用systemd来运行,部署在阿里ecs上. 2.分析 从日志来看,cpu的上升主要为到达文件数限制引起的,但之前已经更改过系统的文件数及所有用户的文件数,按道理是不应该出现这个问题的,后来查阅资料发现,文件数可以从三个维度限制分别为操作系统限制,用户态限制,以及进程限制,对于这三个维度选取最小值生效.于是对系统进行分析. 首先查看当前打开文件数, 进程占用的文件数并不多. lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more 然后获取系统级文件数限制 输入命令cat /etc/sysctl.conf得到fs.file-max = 1...阅读全文

博文 2016-10-11 09:00:11 u010511236