go语言驼峰 go语言 cgo

go 语言中的 runerune是Go语言中一种特殊的数据类型,它是int32的别名,几乎在所有方面等同于int32,用于区分字符值和整数值,官方解释如下:
下面我们通过一个例子来看一下:
我们猜测一下结果 , hello5 个字符+1 个空格+3 个汉子,算起来应该是 9 个 , 长度为 9 才对,但是我们执行一下,
结果打印是 15,这是为什么呢?
所以计算出的长度就等于 5+1+3*3=15
如果我们需要计算出字符串的长度,而不是底层字节的个数,那么可以使用下面的方法:
运行结果如下:
在 rune 定义上方还有一个,byte = uint8
Python 开发者在迁移到 Go 时需要知道哪些事没有内建的集合类型(需要使用 map , 然后测试存在性)
由于没有集合类型,需要自己写代码来实现交集、并集等方法
【go语言驼峰 go语言 cgo】无元组(tuple) , 必须自己写架构或使用切片(slice)(数组)
没有类似 getattr_() 的方法,因此需要不断检查存在性,而不能像在 Python 中那样设置缺省值:value = https://www.04ip.com/post/dict.get(“a_key”, “default_value”)
必须不断检查错误(至少需要显式忽略它们)
不能包含未使用的变量或包 , 因此有时候如果要测试一些简单问题,需要给代码添加注释
在 []byte 和 string 之间切换 。正则表达 (regexp) 使用 []byte (可变) 。这说得通,但是在一些变量之间来回切换还是很烦人
Python 更为宽松 。你可以用超出范围的索引来索取字符串片段,也不会有什么问题,还可以提取负值片段,但是 Go 就不行
不能使用混合类型的数据结构 。也许不合规定 , 但是有时候在 Python 可以使用混合字符串和列表的字典 。在 Go 就不行,要么清理干净数据结构,要么自定义结构 。感谢 Ralph Corderoy 向笔者展示了如何正确操作(用这个界面,卢克)
不能把元组或列表分解成分开的变量(如 x,y,x = [1,2,3])
驼峰字规则(UpperCamelCase)(如果一个包中的函数或结构首字母未大写,就不会暴露给其他包) 。笔者更喜欢 Python 的小写加下划线格式(lower_case_with_underscores)
需要显式检查错误是否为 != nil,不像 Python 有很多类型可以用于布尔型检查(0,“”,None 都会被解读为“假”)
某些模块(如 crypto/md5)的文档不足,但是 IRC 上面的 go-nuts 非常棒,拥有特别好的支持
从数字到字符串的类型转换(int64 - 字符串)跟[]byte - 字符串(只用字符串([]byte))不同,需要用到 strconv
Go 的代码读起来更像是编程语言,而 Python写出来更像伪代码 。Go 包含更多非数字字母字符,用 || 和来表示“或”与“和”
写文件会有 File.Write([]byte) 和File.WriteString(string),这会让习惯了 Python
只有一种做事方法的开发者们有些不适应
字符串插入很麻烦,不得不经常使用 fmt.Sprintf
没有构造函数,常见的做法是创建 NewType() 函数,来返回你需要的结构
Else 或 else if 必须格式正确,else 得跟 if 从句的大括号在一行 。这很奇怪 。
根据函数内外位置,使用不同的赋值操作符,例如 = 和 :=
如果只想要类似dict.keys() 或dict.values()得到的键值或取值列表,或者通过
dict.items()得到的元祖列表 , 在 Go 里面是无法实现的,只能自行迭代 map,然后创建自己的列表
笔者习惯建立一个取值为函数的字典,并通过键值调用函数 。你可以在 Go
里面这么做,但是所有的函数都得接受和返回同样的东西,也就是说,必须具备同样的方法签名
如果你是用 JSON, 而且是混合类型的 JSON,那么你还是自求多福吧 。你得创建一个能够匹配你的 JSON 二进制大对象(blob)格式的个性化结构,然后解组(Unmarshall)原始 JSON 成为你的个性化架构的一个用例 。比起在 Python 中的一句“obj = json.loads(json_blob)”要费更多功夫

推荐阅读