手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:Go

Golang官网被墙解决办法

GoLang的官网经常 会抽风,至于为什么,我想大家都明白的,所以有人还在code.google.com上维护了一份hosts列表,但是。。恐怕也就因为这些项目,导致了code.google.com也会偶尔抽抽风。

好吧。golang只是一个语言类的网站,何必呢?就象当年的python....

golang的官网在:golang.org,如果打不开但你又想看里面的内容,有几种办法
1、添加hosts记录:
173.194.75.141 golang.org
怎么添加我就不说了,没意思。如果你连这个也不会,那就不用看了

2、看chm,
astaxie维护了一份chm的手册,如果你只是看手册,那当然没问题:https://github.com/astaxie/godoc/downloads

3、godoc
如果你安装了go,那么你是不是忽略了godoc呢?OK在命令行下执行
godoc -http:=8080 ,这个8080就是你自己设置的端口,OK现在你在浏览器里打开http://localhost:8080,是不是看到了与golang.org一样的界面了?

4、还有没有其他办法?
http://go.neatcn.com
我自己也做了个反向代理 ,只是速度可能会较慢一点。

----

后续,刚才看到了这篇:http://zhan.renren.com/golanguage?gid=3602888498033773463&from=post&checked=true

居然很多想法都和我一样,只是他还提出了一个使用liteIDE这个软件,虽然我在用这个软件,但居然没有想过用它来看手册。。。真是的

liteIDE在这里有的下载:http://code.google.com/p/liteide,看页面的左侧,他有提示下载golang ide(或者你直接打开:http://code.google.com/p/golangide/),功能强大,虽然是一个新的软件,但是,它支持了:

  1. go
  2. lua
  3. markdown,markdown可以导出成pdf哦

还有什么不可能的?

Tags: golang, 反向代理, godoc, astaxie

Go语言的fmt包中文教程

因为go的fmt.Printf支持的参数与c的printf(sprintf)不太一样,所以复制一下做个备份。
查起来快一点:

http://www.open-open.com/lib/view/open1352593106824.html
  1. mport "fmt"  
  2. 简介   
  3. Package fmt包含有格式化I/O函数,类似于C语言的printf和scanf。格式字符串的规则来源于C但更简单一些。  
  4. 输出  
  5. 格式:  
  6. 一般:  
  7. %v   基本格式的值。当输出结构体时,扩展标志(%+v)添加成员的名字。the value in a default format.  
  8.      when printing structs, the plus flag (%+v) adds field names  
  9. %#v  值的Go语法表示。  
  10. %T   值的类型的Go语法表示。  
  11. %%   百分号。  
  12. 布尔型:  
  13. %t   值的true或false  
  14. 整型:  
  15. %b   二进制表示  
  16. %c   数值对应的Unicode编码字符  
  17. %d   十进制表示  
  18. %o   八进制表示  
  19. %q   单引号  
  20. %x   十六进制表示,使用a-f  
  21. %X   十六进制表示,使用A-F  
  22. %U   Unicode格式: U+1234,等价于"U+%04X"  
  23. 浮点数:  
  24. %b   无小数部分、两位指数的科学计数法,和strconv.FormatFloat的'b'转换格式一致。举例:-123456p-78  
  25. %e   科学计数法,举例:-1234.456e+78  
  26. %E   科学计数法,举例:-1234.456E+78  
  27. %f   有小数部分,但无指数部分,举例:123.456  
  28. %g   根据实际情况采用%e或%f格式(以获得更简洁的输出)  
  29. %G   根据实际情况采用%E或%f格式(以获得更简洁的输出)  
  30. 字符串和byte切片类型:  
  31. %s   直接输出字符串或者[]byte  
  32. %q   双引号括起来的字符串  
  33. %x   每个字节用两字符十六进制数表示(使用小写a-f)  
  34. %X   每个字节用两字符十六进制数表示(使用大写A-F)  
  35. 指针:  
  36. %p   0x开头的十六进制数表示  
  37. 木有'u'标志。如果是无类型整数,自然会打印无类型格式。类似的,没有必要去区分操作数的大小(int8, int64)。  
  38. 宽度和精度格式化控制是指的Unicode编码字符的数量(不同于C的printf,它的这两个因子指的是字节的数量。)两者均可以使用'*'号取代(任一个或两个都),此时它们的值将被紧接着的参数控制,这个操作数必须是整型。  
  39. 对于数字,宽度设置总长度,精度设置小数部分长度。例如,格式%6.2f 输出123.45。  
  40. 对于字符串,宽度是输出字符数目的最低数量,如果不足会用空格填充。精度是输出字符数目的最大数量,超过则会截断。  
  41. 其它符号:  
  42. +    总是输出数值的正负号;对%q(%+q)将保证纯ASCII码输出  
  43. -    用空格在右侧填充空缺而不是默认的左侧。  
  44. #    切换格式:在八进制前加0(%#o),十六进制前加0x(%#x)或0X(%#X);废除指针的0x(%#p);  
  45.      对%q (%#q)如果可能的话输出一个无修饰的字符串;  
  46.      对%U(%#U)如果对应数值是可打印字符输出该字符。  
  47. ' '  对数字(% d)空格会留一个空格在数字前并忽略数字的正负号;  
  48.      对切片和字符串(% x, % X)会以16进制输出。  
  49. 0    用前置0代替空格填补空缺。  
  50. 每一个类似Printf的函数,都会有一个同样的Print函数,此函数不需要format字符串,等价于对每一个参数设置为%v。另一个变体Println会在参数之间加上空格并在输出结束后换行。  
  51. 如果参数是一个接口值,将使用内在的具体实现的值,而不是接口本身,%v参数不会被使用。如下:  
  52. var i interface{} = 23  
  53. fmt.Printf("%v\n", i)  
  54. 将输出23。  
  55. 如果参数实现了Formatter接口,该接口可用来更好的控制格式化。  
  56. 如果格式(标志对Println等是隐含的%v)是专用于字符串的(%s %q %v %x %X),还提供了如下两个规则:  
  57. 1. 如果一个参数实现了error接口,Error方法会用来将目标转化为字符串,随后将被按给出的要求格式化。  
  58. 2. 如果参数提供了String方法,这个方法将被用来将目标转换为字符串,然后将按给出的格式标志格式化。  
  59. 为了避免有可能的递归循环,例如:  
  60. type X string  
  61. func (x X) String() string { return Sprintf("<%s>", x) }  
  62. 会在递归循环前转换值:  
  63. func (x X) String() string { return Sprintf("<%s>", string(x)) }  
  64. 错误的格式:  
  65. 如果提供了一个错误的格式标志,例如给一个字符串提供了%d标志,生成的字符串将包含对该问题的描述,如下面的例子:  
  66. 错误或未知的格式标志: %!verb(type=value)  
  67.      Printf("%d", hi):          %!d(string=hi)  
  68. 太多参数: %!(EXTRA type=value)  
  69.      Printf("hi", "guys"):      hi%!(EXTRA string=guys)  
  70. 缺少参数: %!verb(MISSING)  
  71.      Printf("hi%d"):            hi %!d(MISSING)  
  72. 使用非整数提供宽度和精度: %!(BADWIDTH) or %!(BADPREC)  
  73.      Printf("%*s", 4.5, "hi"):  %!(BADWIDTH)hi  
  74.      Printf("%.*s", 4.5, "hi"): %!(BADPREC)hi  
  75. 所有的错误都使用"%!"起始,(紧随单字符的格式标志)以括号包围的错误描述结束。  
  76. 输入  
  77. 一系列类似的函数读取格式化的文本,生成值。Scan,Scanf和Scanln从os.Stdin读取;Fscan,Fscanf和Fscanln 从特定的io.Reader读取;Sscan,Sscanf和Sscanln 从字符串读取;Scanln,Fscanln和Sscanln在换行时结束读取,并要求数据连续出现;Scanf,Fscanf和Sscanf会读取一整行以匹配格式字符串;其他的函数将换行看着空格。  
  78. Scanf, Fscanf, and Sscanf根据格式字符串解析数据,类似于Printf。例如,%x将读取一个十六进制数,%v将读取值的默认表示。  
  79. 格式行为类似于Printf,但有如下例外:  
  80. %p没有提供  
  81. %T没有提供  
  82. %e %E %f %F %g %G是等价的,都可以读取任何浮点数或者复合数(非复数,指科学计数法表示的带指数的数)  
  83. %s 和 %v字符串使用这两个格式读取时会因为空格而结束  
  84. 不设格式或者使用%v读取整数时,如果前缀为0(八进制)或0x(十六进制),将按对应进制读取。  
  85. 宽度在输入中被解释(%5s意思是最多从输入读取5个字符赋值给一个字符串),但输入系列函数没有解释精度的语法(木有%5.2f,只有%5f)。  
  86. 输入系列函数中的格式字符串,所有非空的空白字符(除了换行符之外),无论在输入里还是格式字符串里,都等价于1个空白字符。格式字符串必须匹配输入的文本,如果不匹配将停止读取数据并返回函数已经赋值的参数的数量。  
  87. 所有的scan系列函数,如果参数包含Scan方法(或者说实现了Scanner接口),该参数将使用该方法读取文本。另外,如果被填写的参数的数量少于提供的参数的数量,将返回一个错误。  
  88. 所有要被输入的参数都应该是基础类型或者实现了Scanner接口的数据类型的指针。  
  89. 注意:Fscan等函数可以从输入略过一些字符读取需要的字符并返回,这就意味着一个循环的读取程序可能会跳过输入的部分数据。当数据间没有空白时就会导致出现问题。如果读取这提供给Fscan系列函数ReadRune 方法,这个方法可以用来读取字符。如果读取者还提供了UnreadRune 方法,该方法将被用来保存字符以使成功的调用不会丢失数据。为了给一个没有这些功能的读取者添加这俩方法,使用bufio.NewReader。   

这样就看起来方便多了,而且。速度也快。。。。

几个GO的资源站:

  1. http://www.cnblogs.com/ztiandan/category/436475.html
  2. http://www.dotcoo.com/?tag=golang
  3. http://www.diandian.com/tag/golang
  4. http://code.google.com/p/golang-china/
  5. http://www.zhaokunyao.com/archives/category/go-lang

还有一些知名的和不知名的就不贴了。比如astaxie的GITHUB上的教程。大家都知道。。

Tags: fmt

GO 的一个小陷阱

在群里突然看到一段代码:

XML/HTML代码
  1. package main  
  2.   
  3. import (  
  4.     "fmt"  
  5. )  
  6.   
  7. var DomainId int  
  8.   
  9. func init() {  
  10.     DomainId, err :GetDomainId()  
  11.     if err != nil {  
  12.         DomainId = -1  
  13.     }  
  14.     fmt.Println(DomainId)  
  15. }  
  16.   
  17. func GetDomainId() (int, error) {  
  18.     DomainId = 1  
  19.     return DomainId, nil  
  20. }  

注意看红色背景的一条,理论上这段代码没有错,但事实上会报错了。

XML/HTML代码
  1. [上海]Asta谢()  22:29:50  
  2. 我知道  
  3. [上海]Asta谢()  22:29:55  
  4. 我踩过这个坑  
  5. [上海]Asta谢()  22:30:04  
  6. init里面不能用:=  

所以,上面的代码应该是写成:

XML/HTML代码
  1. func init() {  
  2.     var err error  
  3.     DomainId, err = GetDomainId()  
  4.     if err != nil {  
  5.         DomainId=-1  
  6.     }  
  7. }  

对比两段红色背景的代码。主要是做个笔记 .怕会忘 .

Asta谢 是谁?看这里:https://github.com/astaxie/build-web-application-with-golang ,这里有一篇他的教程,适合广大人民群众查看

Tags: go

GO 练习四

又是一个笔记:

    var tt = []int{1,2,3,4,5}
    for i,j:=0,len(tt)-1; i < j; i,j=i+1,j-1 {
        tt[i],tt[j] = tt[j],tt[i]
    }
    fmt.Println(tt);

本来以为for循环是很简单的。
我最初是这样写的
for i:=0,j:=len(tt)-1;i<j;i++,j-- {
    ..
}
结果直接报错:
# command-line-arguments
./tour.go:123: syntax error: unexpected comma, expecting {
./tour.go:126: non-declaration statement outside function body
./tour.go:127: syntax error: unexpected }
[Finished in 0.2s with exit code 2]

看了手册才明白。。我晶
------------------
顺便。数组有两个玩意:len,cap,理解的话一个可以当成现有长度,一个是最大长度。
如:tt := make([]int ,5)
这时候tt是被填充的{0,0,0,0,0}
如果 tt:=make([]int ,0,5);
这时候tt的最大长度是5,但结果是{},黑黑

Tags: 循环

GO 练习三

先继续昨天的话题,昨天说到type xx struct的时候,如果使用map,需要注意的事项,就是最后的逗号不少能少,例如:
var m = map[string]Vertex{
    "aa":Vertex{1,2,},
    "bb":Vertex{3,4,},
}
其实还是有简化写法。当然这是基于m["aa"]的类型也是Vertex的情况:
var m = map[string]Vertex{
    "Bell Labs": {40.68433, -74.39967},
    "Google":    {37.42202, -122.08408},
}
这个时候。看到没,-74后面的逗号可以省掉了。但最后的逗号还是省不掉。。。切记
-------
读取、修改、删除map很简单,就象PHP的数组一样。不过删除不太一样。。
读取:s = m["test"];
修改:m["test"] = 123;
删除:delete(m,"test");
判断key是否在map中。PHP是isset($m[$key]),而go是:
value,ret = m["test"],看上去是不是和读取很象?嗯,不过要看ret返回什么,如果是false,则value返回0,否则才是真正的m["test"]的值。。
需要注意一下
-------
对于go的数组,可以用len()函数来获取它的长度。
顺便说一下,go的内置函数很容易分别,内置函数首字符都是小写,否则,import包的话。首字符都是大写,如:fmt.Println之类的
如果熟悉python,则会发现go的数组读取和python很象。当然。。。有一点不象的是go的数组的key不允许是负数。否则会报错。。而python的负数则是从相反的方向读数据,因此python的数组反转很容易。。

Records:3812345678