Golang 中国

rockman

闻道有先后,术业有专攻

Golang China 第 5135 号会员,加入于 2016-03-24 18:04



Golang爱好者

rockman最近回复了


回复了 rockman 创建的主题: golangtc.com经常不能访问。 网络:上海电信 2017-12-08 20:13

又不能访问了。ip显示是香港阿里云的地址。
站长如果自己有公司的话,可以考虑走备案。

回复了 xt3627216 创建的主题: Go中string类型是如何进行比较操作的? 2017-12-08 11:02

实质是内存块的比较,最终会调用对应架构的汇编代码(Go 1.9)。

详见:Golang String Compare Internals(Go 1.9)

回复了 2805408253 创建的主题: web开发框架选择 2017-12-08 10:28

推荐比较轻巧的GIN

用来搭建API微服务很快速。

很多教程:

回复了 rockman 创建的主题: golangtc.com经常不能访问。 网络:上海电信 2017-12-08 09:49

这几天上海电信可以访问了,看样子站长搞定了。
怎么解决的?

回复了 Zhangyc310 创建的主题: 如果根据不同的域名,选择不同的handler 2016-10-11 15:21

使用Host-specific pattern for ServeMux

Host Multiple Domains in a Single Golang HTTP Server

To host multiple domains in a single Golang HTTP server, we need to use Host-specific pattern for ServeMux:

Patterns may optionally begin with a host name, restricting matches to URLs on that host only. Host-specific patterns take precedence over general patterns, so that a handler might register for the two patterns “/codesearch” and “codesearch.google.com/“ without also taking over requests for “http://www.google.com/“.

// For Example:
func main() {
    http.HandleFunc("a.com/", helloA)
    http.HandleFunc("sub.a.com/", helloSubA)
    http.HandleFunc("b.com/", helloB)

    if err := http.ListenAndServe(":80", nil); err != nil {
        log.Fatal(err)
    }
}

Example

References

原文链接:
Host Multiple Domains in a Single Golang HTTP Server)

回复了 panjjo 创建的主题: 使用Redis 连接池客户端出现大量TIME_WAIT的链接,是我用法有问题么? 2016-10-10 15:11

先完全用Redigo的官方示例的newPool()替换自己的试试看:

func newPool(server, password string) *redis.Pool {
    return &redis.Pool{
        MaxIdle: 3,
        IdleTimeout: 240 * time.Second,
        Dial: func () (redis.Conn, error) {
            c, err := redis.Dial("tcp", server)
            if err != nil {
                return nil, err
            }
            if _, err := c.Do("AUTH", password); err != nil {
                c.Close()
                return nil, err
            }
            return c, err
        },
        TestOnBorrow: func(c redis.Conn, t time.Time) error {
            if time.Since(t) < time.Minute {
                return nil
            }
            _, err := c.Do("PING")
            return err
        },
    }
}
回复了 shuaixinga 创建的主题: 学习GOLANG很久,还是感觉struct和interface很乱,如何解决? 2016-09-11 19:17

stevewang说的很对。

比如在HTTP服务中动态生成一个压缩包,然后作为response。就可以使用http.ResponseWriter作为参数。

回复了 zbzpo2002 创建的主题: Golang.org竟然能访问了? 为啥? 这个不是真的吧? 2016-09-06 10:58

上海昨天,今天可以访问。
不过还是通过绕的方法啊,希望这次能长久。

昨天安装go get 安装gin的时候看到golang.org/x/net可以安装成功。

回复了 nulijiabei 创建的主题: 谁能提供比较详细的 "golang.org/x/net/context" 使用介绍(中文的) 2016-08-26 21:11

多谢@andylau004的分享。

另外,Google的ctxhttp就用到context:
https://github.com/golang/net/tree/master/context/ctxhttp

果然1.7中已经是标准库了。

回复了 Nixus 创建的主题: golang Web 开发路径为什么是~即/Users/mac/,而不是编译后的文件所在目录? 2016-07-21 11:38

如果访问的是静态资源,那么是应该使用绝对路径

  1. 先得到go程序运行所在的绝对路径
  2. 拼接资源的相对路径,得到资源的绝对路径

Get Current Executable Directory in golang

os.Getwd() will NOT return current executable dir.

  • Getwd returns a rooted path name corresponding to the current directory(See https://godoc.org/os#Getwd).
  • It’s similar to pwd command.
  • Example Code

      package main
    
      import (
              "fmt"
              "os"
      )
    
      func main() {
              dir, _ := os.Getwd()
              fmt.Printf("os.Getwd(): %v\n", dir)
      }
    
  • Test

    • Run the program under the same dir as go project

      • cd /home/xx/projects-go/src/github.com/northbright/getwd-test
      • ./getwd-test
      • the result is: os.Getwd(): /home/xx/projects-go/src/github.com/northbright/getwd-test
    • Run the program under user home

      • cd /home/xx
      • ./projects-go/src/github.com/northbright/getwd-test/getwd-test
      • the result is: os.Getwd(): /home/xx

Solution

import (
    "fmt"
    "os"
    "os/exec"
    "path/filepath"
)

func GetCurrentExecDir() (dir string, err error) {
    path, err := exec.LookPath(os.Args[0])
    if err != nil {
        fmt.Printf("exec.LookPath(%s), err: %s\n", os.Args[0], err)
        return "", err
    }

    absPath, err := filepath.Abs(path)
    if err != nil {
        fmt.Printf("filepath.Abs(%s), err: %s\n", path, err)
        return "", err
    }

    dir = filepath.Dir(absPath)

    return dir, nil
}

References

rockman 创建的更多回复