Submitted by gouki on 2013, May 27, 10:18 PM
在golang里面获取时间戳并不难。只要加载time包。然后time.Now().Unix(),就可以了,但接下来转成string就麻烦了
本来,加载strconv的话,用strconv.Itoa也可以解决,但unixtime的时间戳是int64, itoa只能转32位的。这时候就只有一个恶心的办法了。
fmt.Sprintf("%d",int64),这个是肯定可以转,。。。。我现在就是用这种办法的
做个笔记
--EOF--
后记,在群里问了一下,结果asta谢就说了。明明有strconv.FormatInt,用godoc看了一下,居然没看到。可能我的版本旧了。
strconv.Format(int64 , 10) ,后面的参数是2~36,简单就是php的base_convert的go版本。看来,go做tinyurl也是用这个函数了。哈哈
感谢群友们。
---next
自此,go语言的int转换成string有3种方法
1、int32位,strconv.Itoa
2、大于32位,strconv.FormatInt()
3、万恶的fmt.Sprintf...好吧,这个我在php里是经常用来做格式化
Go | 评论:0
| 阅读:35556
Submitted by gouki on 2013, May 27, 6:36 PM
越来越怀念PHP的一些函数,比如md5("123456")
多方便的函数啊。但在golang就不行了。。。
1、import (
"crypo/md5"
"encoding/hex"
)
2、代码:
XML/HTML代码
- m := md5.New();
- m.Write([]byte("123456"))
- println(hex.EncodingToString(m.Sum(nil)))
是不是很麻烦??
Tags: golang, md5
Go | 评论:1
| 阅读:20175
Submitted by gouki on 2013, May 24, 3:01 PM
在写一段代码测试的时候,用上了json类,因为json还算是比较常用的,所以这个的转换什么的要先掌握好。
吭嗞吭嗞写完代码,发现输出都是空,想想不科学啊,struct还是struct,为什么都输出空呢。
想着astaxie说过为了给大家写文档,特地写了一个项目gopkg,于是上去看了看:https://github.com/astaxie/gopkg/blob/master/encoding/json/Marshal.md
咦,代码结构和程序都是几乎一样的,那为什么会出错呢?
去群里问了一下,原来就是因为首字母小写的问题。
一直以为只有func的首字母大小写代表了 公有方法和私有方法,原来,变量这玩意也是这个含义。。。纠结,做个笔记备份一下:
贴出错误代码:
type ColorGroup struct {
id int
name string
color []string
}
colorgroups := ColorGroup{
id: 1,
name: "reds",
color: []string{"a", "b", "c"},
}
b, _ := json.Marshal(colorgroups)
os.Stdout.Write(b)
----
struct中的变量要注意大小写。。。。。
小写的话,在转换的时候就会隐藏掉,可以根据情况进行设置
当然,如果确实 需要小写,又需要输出,怎么办呢??
可以写tag ,参考:
type ColorGroup struct {
Id int`json:"id"`
name string `json:"name"`
color []string `json:"color"`
}
反正。。。struct输出json,一定要大写,但是如果要变成输出小写,就得用tag
如果原来就是小写,再怎么写TAG,也不会输出。。。
Tags: json, golang
Go | 评论:0
| 阅读:20547
Submitted by gouki on 2013, May 23, 12:22 PM
谢大的教程在:https://github.com/astaxie/build-web-application-with-golang
在复刻和学习的过程中,把问题记录下来的笔记
1、
XML/HTML代码
- // 声明一个数组
- var array = [10]byte{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'}
- // 声明两个slice
- var aSlice, bSlice []byte
-
- // 演示一些简便操作
- aSlice = array[:3] // 等价于aSlice = array[0:3] aSlice包含元素: a,b,c
- aSlice = array[5:] // 等价于aSlice = array[5:10] aSlice包含元素: f,g,h,i,j
- aSlice = array[:] // 等价于aSlice = array[0:10] 这样aSlice包含了全部的元素
-
- // 从slice中获取slice
- aSlice = array[3:7] // aSlice包含元素: d,e,f,g,len=4,cap=7
- bSlice = aSlice[1:3] // bSlice 包含aSlice[1], aSlice[2] 也就是含有: e,f
- bSlice = aSlice[:3] // bSlice 包含 aSlice[0], aSlice[1], aSlice[2] 也就是含有: d,e,f
- bSlice = aSlice[0:5] // 对slice的slice可以在cap范围内扩展,此时bSlice包含:d,e,f,g,h
- bSlice = aSlice[:] // bSlice包含所有aSlice的元素: d,e,f,g
主要是加深颜色的那句。。。。
2、
go代码
- type human struct {
- name string
- age string
- height int
- }
- type student struct {
- human
- skills
- int
- age int
- speciality string
- }
- func (h *human) sayhi() {
- fmt.Printf("human say hello, i'm %s \n", h.name)
- }
- func (h *human) gogo() {
- fmt.Println("gogogo");
- }
- type men interface{
- sayhi()
- gogo()
- }
-
- 然后用的地方:
- mike := student{human:human{name:"mike"}}
- var i men;
- i = mike;
- i.sayhi();
因为这是早期的所见所得编辑器。对于代码高亮做的不好。忍忍吧。。。
上面的代码是会出错的。
cannot use mike (type student) as type men in assignment:
student does not implement men (gogo method requires pointer receiver)
需要:mike := &student{human:human{name:"mike"}}
看到没,在student前有个取址符。主要是因为方法指定的是:(h *human),如果是(h human),就不需要取址符了
*human 是指针,但是你mike不是指针,只是对象,所以没有实现这两个方法,才会报错
然后谢大给出了这个:http://segmentfault.com/q/1010000000198984#a-1020000000199002,说是里面有解释
XML/HTML代码
- 假设T是struct,那么Go里面遵循下面几个原则:
-
- T的方法集仅拥有 T Receiver 方法。
- *T 方法集则包含全部方法 (T + *T)。
- 所以你上面的例子dept1应该是拥有方法:Name和SetName
- 而&dept1拥有方法:Name、SetName和Relocate
- 这个就是Go里面在设计方法的时候需要注意Receiver的类型
Tags: go, astaxie
Go | 评论:0
| 阅读:17679
Submitted by gouki on 2013, February 21, 1:46 PM
如何学GO,如何用GO,如果整理思想,正好有几篇文章可以看一下
1.Danny.tian: 一步一步学习Revel Web开源框架
2.许式伟:Go,基于连接与组合的语言(上)
3. GAE教程:https://developers.google.com/appengine/docs/go/
开发的时候,有工具可以使用,国人开发的一款IDE
1.Go语言开发工具LiteIDE(作者采访)
2.http://code.google.com/p/liteide
还有一份GO Web开发教程,这一份流传的较广,但我不介绍了,这是infoQ的采访:
1.采访:关于Go语言和《Go Web编程》
一步一步往前走吧,真可恨自己的时间不够 .
Go | 评论:0
| 阅读:13986