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

Golang strings包的TrimRight和TrimSuffix的区别

昨天遇到一个问题,strings.TrimRight("cyeamblog.go", ".go")结果居然是"cyeambl",这让我百思不得其解。当然,要看官方文档的解释: func TrimRight(s string, cutset string) string TrimRight returns a slice of the string s, with all trailing Unicode code points contained in cutset removed. func TrimSuffix(s, suffix string) string TrimSuffix returns s without the provided trailing suffix string...阅读全文

Golang使用RemoteAddr()获取远程主机地址的注意事项

一、问题描述http.Request 下的方法RemoteAddr() 可以获取客户端的地址和端口号,最近的一个项目中用到了这个方法。 使用过程中一直都没有什么问题,但是当项目上线之后就发现不管怎么获取ip,客户端地址都是127.0.0.1 。 对于这个问题一直百思不得其解,最后搞了半天才发现是nginx 的原因。 因为线上项目使用nginx做了反向代理,所以导致服务端每次获取的都是nginx的地址,即127.0.0.1 。 关于这个问题的具体的内容可以查看:HTTP协议中的X-Real-IP, X-Forwarded-For和remote_addr头 二、解决方法当http请求不存在代理的时候,使用这个方法时没有问题的,但是在有代理的情况下,就只能通过其他的方法来获取了。 如果是nginx...阅读全文

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

golang template传递值的第二种方法 利用map[string]interface{}

关于golang tmplate怎么样传递值,以前的调查结果是只能用struct,但是最近开一个开源source,发现他竟然用的是map[string]interface{},百思不得其解,所以用一下代码进行验证。 PS,哎,golang的文档还是太弱了啊。 package main import ( "fmt" "html/template" "net/http" "os" ) type Person struct { Name string Age int Emails []string Company string Role string } const templ = ` name is {{.name}} Company is {{.resources.Company}} ` fu...阅读全文

博文 2014-10-04 19:26:07 rufidmx

socket 接收数据 read 读取到字节数组的疑问

Receivebag := make([]byte, 1500) //数据包接收区 k, err := conn.Read(Receivebag) socket 通讯中接收到的数据包怎么会出现异常呢?比如说 发送端发送的是 0x01 0x02 0x03 0x04 但是我接收的时候有时候接受到的某个数据包最后一个字节会出现异常,我接收到的数据变成了 0x01 0x02 0x03 0x?? 每次出现这种问题的时候都是最后一个字节异常了,百思不得其解为什么会这样,求指教 谢谢@polari...阅读全文

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

Go 1.12中出现的top命令RES参数异常增高的问题

问题的发现 偶然在生产上部署了一个版本之后发现,机器不断重启报警,后经过查询linux日志发现,原来是因为服务占用内存过高被内核给kill掉了。接下来就是查问题,本来以为是内存泄漏,上了pprof工具之后发现,内存占用稳定在2.6g,而top命令则很快看到RES参数暴涨到12g+(机器内存16g)后被内核杀掉。百思不得其解。后来在翻阅Go1.12发布说明时看到一段话: On Linux, the runtime now uses MADV_FREE to release unused memory. This is more efficient but may result in higher reported RSS. The kernel will reclaim the unused ...阅读全文

博文 2020-05-21 23:32:45 天地一小儒

too many open files linux服务器 golang java

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 = 1000000查...阅读全文

博文 2017-09-02 07:30:02 zhangboyu

Go中的slice

最近在写代码的时候,需要调用json.Marshal()函数把struct类型的数据,解析成json格式的。但是修改后发现和有的字段的值原来是空的,即[],现在却变成了null。百思之后,终于明白了其中的原因。 先说结论: Go中的slice格式数据,在没有初始化的时候,调用了json.Marshal()函数后会变成null;经过初始化之后的slice,则会被解析成[]。 例如: package main import ( "encoding/json" "fmt" ) type A struct { Numbers []int } func main() { var R = A{} R.Numbers = make([]int, 0) s, _ := json.Marshal(R) fmt...阅读全文

博文 2016-09-15 01:00:04 广泽明月

golang初探之chan的fatal error: all goroutines are asleep - deadlock!

错误代码1 初学的chan的我,写出了这样的代码。 package main func main() { c := make(chan int8) c<-1 print(<-c) } 运行结果: fatal error: all goroutines are asleep - deadlock! 正确代码1 百思不得其解。然后我将代码写出这样。将写的步骤改为异步。 func main() { c := make(chan int8) go func() { c <- 1}() print(<-c) } 结果能正常运行,打印了1. 1 将问题发到群里,大佬解释了一波。 image.png 正确代码2 原因就是在于对chan读写不能同一个线程。但是,当我学到chan可以设置缓冲区大小。我将代码改...阅读全文

求大神指点:Println函数没有按指定的代码输出形状

Golang新手,在练习代码时遇到这样情况,百思不得解,求社区大神指导: 代码: 、、、go // 要求编译一个程序,实现输出❤的形状。 package main import "fmt" func main (){ fmt.Println("*\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t*\n", "\t\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\n", "\t\t\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\n", "\t\t\t\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*\t*...阅读全文

博文 2018-10-17 14:11:39 Subhuti_hu