golang tcp io dt的一些问题
1. io是阻塞的 导致类似 公频聊天一对多的时候 write 到所有用户的时候 等等待所有写入完成 函数才执行完毕 要么就模拟一个异步 但是目前为止没有找到好的解决方案 2.io是阻塞的 导致conn.Read([]byte) 让我以为是 buf := make([]byte, 2) conn.Read(buf) 要么返回一个错误,要么阻塞直到读到2个byte数据为止 其实有可能会返回 1,nil阅读全文
1. io是阻塞的 导致类似 公频聊天一对多的时候 write 到所有用户的时候 等等待所有写入完成 函数才执行完毕 要么就模拟一个异步 但是目前为止没有找到好的解决方案 2.io是阻塞的 导致conn.Read([]byte) 让我以为是 buf := make([]byte, 2) conn.Read(buf) 要么返回一个错误,要么阻塞直到读到2个byte数据为止 其实有可能会返回 1,nil阅读全文
源码地址 什么是dnsmasq(摘自网络) Dnsmasq 提供 DNS 缓存和 DHCP 服务功能。作为域名解析服务器(DNS),dnsmasq可以通过缓存 DNS 请求来提高对访问过的网址的连接速度。作为DHCP 服务器,dnsmasq 可以为局域网电脑提供内网ip地址和路由。DNS和DHCP两个功能可以同时或分别单独实现。dnsmasq轻量且易配置,适用于个人用户或少于50台主机的网络。此外它还自带了一个 PXE 服务器。 更多详细 https://wiki.archlinux.org...阅读全文
今天项目中要将map存入cookie,于是大象哥研究了下json和base64,写了个小例子 一、将map存入cookie //要存入cookie的map your := map[string]string{} your["isuser"] = isuser your["username"] = username your["password"] = d.Strtomd5(password) //将map转成json 转换后的是[]byte,需要string(your_byte...阅读全文
s := strings.Split("", "") fmt.Println(s, len(s)) s = strings.Split("abc,abc", "") fmt.Println(s, len(s)) s = strings.Split("", ",") fmt.Println(s, len(s)) s = strings.Split("abc,abc", ",") fmt.Println(s, len(s)) s = strings.S...阅读全文
package loggerimport ( "fmt" "log" "os" "runtime" "strconv" "sync" "time")const ( _VER string = "1.0.0")type LEVEL int32var logLevel LEVEL = 1var maxFileSize int64var maxFileCount int32var dailyRolling bool = truevar consoleAppender bool = truevar Ro...阅读全文
func main() { Func1(1,2,3,4) } func Func1(args ...int) { for _, res := range args { fmt.Println(res) } Func2(args...) Func3(args[2:]...) } func Func2(args ...int) { fmt.Println("----") for _, res := range args { fmt.Println(res) } } f...阅读全文
func main() { Print(1, "hello", 55.9) } // 表示可以传任意值 func Print(args ...interface{}) { for _, res := range args { switch res.(type) { case int : fmt.Println(res, " is int") case float64 : fmt.Println(res, " is float64"); case st...阅读全文
func main() { // defer 必须在异常抛出之前 // 下面如果有异常抛出(或人为panic) // 则停止往下执行,跳转到defer后的代码块进行收尾工作 // 即便不会抛出异常,最后也会执行defer后的代码进行收尾 // 用recover处理异常信息,当err为空时,则证明没有任何异常抛出 // 如果不为空,则进行异常处理 defer func() { if err := recover();nil!=err { fmt.Println(err) ...阅读全文
1、当range作用于string时, 第一个返回值为index,第二次是char str := "hello world" for index, ch := range str { fmt.Printf("%d --- %c\n", index, ch) } 2、当range作用于array时, 第一个返回值为index,第二次是value func PrintArray(array [5]int) { for index, res := range ...阅读全文
package main import "fmt" type Base struct { Name string } func (b *Base) SetName(name string) { b.Name = name } func (b *Base) GetName() string { return b.Name } // 组合,实现继承 type Child struct { base Base // 这里保存的是Base类型 } // 重写GetName方法 fu...阅读全文
package main import "fmt" type Base struct { Name string Age int } type Child struct { Base // 匿名字段, 默认把Base的所有字段都继承过来了。 这样看起来才像真正的继承 Age int } func main() { c := new(Child) c.Name = "hello" // 可以直接使用Base中的字段 c.Age = 20 // 如果有重复的, 则最外的优先 ...阅读全文
package main import "fmt" type IFile interface { Read() Write() } type IReader interface { Read() } type File struct { } func (f *File) Read() { } func (f *File) Write() { } func main() { f := new(File) var f1 IFile = f // ok...阅读全文
package main import "fmt" type IReader interface { Read(file string) []byte } type IWriter interface { Write(file string, data []byte) } // 接口组合, 这些默认就继承了Reader和Writer中的抽象方法 type IReadWriter interface { IReader IWriter } type ReadWriter stru...阅读全文
创建带有缓冲区的channel: ch := make(chan int, 10) 则该缓冲区最多可以不断接收10次写入,然后10次读出 package main import "fmt" import "strconv" func main() { ch := make(chan int, 10) // 创建一个具有10个缓存区的channel for { select { case ch <- 1 : fmt.Println("read data") ...阅读全文
把Go程序变小的办法是: go build -ldflags "-s -w" (go install类似) -s去掉符号表(然后panic时候的stack trace就没有任何文件名/行号信息了, 这个等价于普通C/C++程序被strip的效果), -w去掉DWARF调试信息,得到的程序就不能用gdb调试了。 比如,...阅读全文
https://go.googlecode.com/hg/doc/go1.1.html go1.1 和go1 有部分改变: Changes to the standard library bufio.Scanner The various routines to scan textual input in the bufio package, ReadBytes, ReadString and particularly ReadLine, are needlessl...阅读全文
今天调试程序的时候发现程序报is an unexported field of struct type controllers,但是用fmt.Println打印结构能正常 ,只是放到模板引擎中就不能访问了。 查找错误过程: 在控制台能够通过FMT包打印结构体,那么证明语法上应该没有什么问题。而且发生错误只是在模板调用的时候发生,于是从调用的数据入手。原先的定义的结构是 type Good struct{ item string ...阅读全文
变量的定义: go总使用var来声明变量,在函数外面声明变量的方式有 var 变量1, 变量2, 变量3 [int] = 1, 2, 3,其中int这个类型声明可以省略。如果在函数内部声明可以使用以下这种更加简便的方法 变量1, 变量2, 变量3 := 1, 2, 3,这种方式只能在函数内使用。 常量的使用: go中常量可以定义为数组、布尔值、字符串等类型。使用const 常量名 [常量类型] = 常量值。 ...阅读全文
if: 使用的语法如: if x > 10 { fmt.Println("x大于10") } else { fmt.Println("x小于10") } 条件判断语句中不需要括号。与其他语言不同的就是条件判断语句里允许声明一个变量,这个变量的作用域在该条件逻辑块内有效,其他地方不起作用,如: if x := randVal(); x > 10 { fmt.Pri...阅读全文
做了下go和java的http性能的简单比较服务端直接输出字符串使用JMeterwindows下 2000的并发,测试结果很出乎意料,go不会这么差吧研究了半小时,原因如下servlet添加里加了 response.setHeader("Pragma", "no-cache"); go的测试代码里没有设置该参数设置后重新跑测试ok阅读全文