初级会员
  • 第 18021 位会员
  • jan-bar
  • janbar
  • 2018-04-21 11:54:32
  • Offline
  • 44 52

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 评论了博文 Go 每日一库之 go-ini
    我自己写的自己用的读取ini文件,虽然很简单但够我用了。分享一波。 ```go package config import ( "bufio" "bytes" "io" "os" "strconv" ) type ( Value string Option map[string]Value IniConfig map[string]Option ) func LoadConfig(path string) (IniConfig, error) { fr, err := os.Open(path) if err != nil { return nil, err } defer fr.Close() var ( index = 0 section = "" r = bufio.NewReader(fr) cnf = make(IniConfig, 8) ) for { line, _, err := r.ReadLine() if err != nil { if err == io.EOF { return cnf, nil } return nil, err } if line = bytes.TrimSpace(line); len(line) == 0 { continue } s := bytes.IndexAny(line, ";#") if s == 0 { continue } else if s > 0 { line = line[:s] } if s = bytes.IndexByte(line, '['); s >= 0 { if e := bytes.IndexByte(line[s:], ']'); e > s { section = string(line[s+1 : e]) cnf[section] = make(Option, 8) cnf[section]["index"] = Value(strconv.Itoa(index)) index++ } } else if s = bytes.IndexByte(line, '='); s > 0 && section != "" { cnf[section][string(bytes.TrimSpace(line[:s]))] = Value(bytes.TrimSpace(line[s+1:])) } } } func (c IniConfig) GetOption(section string) Option { if ks, ok := c[section]; ok { return ks } return nil } func (o Option) GetValue(option string) Value { if ko, ok := o[option]; ok { return ko } return "" } func (c IniConfig) GetValue(section, option string) Value { if ks, ok := c[section]; ok { if ko, ok := ks[option]; ok { return ko } } return "" } func (v Value) ToString(defValue string) string { if v == "" { return defValue } return string(v) } func (v Value) ToBool(defValue bool) bool { if b, err := strconv.ParseBool(string(v)); err == nil { return b } return defValue } func (v Value) ToInt(defValue int) int { if i, err := strconv.Atoi(string(v)); err == nil { return i } return defValue } func toInt64(s Value, factor, defValue int64) int64 { if i, err := strconv.ParseInt(string(s), 10, 0); err == nil { return i * factor } return defValue } func (v Value) ToBytes(defValue int64) int64 { if len(v) > 2 { switch str := v[:len(v)-2]; v[len(v)-2:] { case "KB": return toInt64(str, 1024, defValue) case "MB": return toInt64(str, 1024*1024, defValue) case "GB": return toInt64(str, 1024*1024*1024, defValue) } } return toInt64(v, 1, defValue) } ```
  • go支持指定文件编译(单文件或多文件都行),指定目录编译(编译目录下所有go文件),指定package编译这三种方式 没有一定让你放到GOPATH里面,你说的这种情况一般再指定package的时候才会用到。
  • #1 @nanhuai 写这个的时候看了这个作者的项目额,你这个我也看了的额。不过我是想自己写个翻墙的工具,加密解密和开源的不一样,不然可能被查特征这种方式封端口或者IP额。但那个翻墙工具我不敢放出来,本篇文章只是把客户端代理socks5和http的部分公布出来的。大家自己有兴趣可以按照注释里面的实现相关方法即可。
  • 评论了博文 语法糖的代价
    我觉得我应该不会写成你有问题的样子,因为对象赋值给接口都是单个的,包括我看过的所有go源码里面的操作,都没有直接把切片转成另外一种类型的切片。我觉得这不是协变的问题,而是基本语法没理解好吧。
  • 我有个不成熟的建议,修改go源码。我有几个项目都是修改go源码编译的,反正编译出来是可执行程序,写个readme解释一下就行了。如果有代码洁癖,就去github提issue吧,支持的人多,说不定go团队下个版本就支持咯。