immutable
python里str的情况:In [3]: name = str("abcde")
In [4]: name[1]
Out[4]: 'b'
In [5]: name[1] = "3"
TypeError: 'str' object does not support item assignment
python里unicode的情况:
In [6]: name = unicode("abcde")
In [7]: name[2]
Out[7]: u'c'
In [8]: name[2] = u'f'
TypeError: 'unicode' object does not support item assignment
golang中的string类型也是immutable的:
func main() {
var name string = "abcd";
fmt.Printf("%c\n", name[2]);
//这种修改将会产出错
name[1] = 'c';
//只能得到string变量的开始地址.
fmt.Printf("%p\n", &name);
//下面会报错, 因为不能求元素的地址!
fmt.Prinft("%p\n", &name[2]);
}
string literals
在字符串上, golang使用三种符号:1. 单引号: 与C一样, 表示是byte,
2. 双引号: 与C一样, 表示N种byte, 只是golang中不可以修改和求元素的地址.
3. 反引号: 不解释字符串的转义符.
python中也有这三种用法, 只是使用的表达方式:
1. 单(双)引号: 表示N种chr实例的集合
2. u开头的unicode string literals, 还没有发现golang有unicode string literals
3. r开头的string literals:
In [10]: print r'a\nb'
a\nb
unicode问题
双引号得到的是不可修改的byte集. 不是unicode类型!下面做一个测试, 先得到一个汉字的外码和unicode码:
In [14]: u'中'
Out[14]: u'\xe4\xb8\xad'
In [15]: unicode('中', "utf-8")
Out[15]: u'\u4e2d'
再看golang的代码:
func main() {
var infomation string = "\u4e2d"; //使用unicode的标志法, 也无法改变string就是byte集的现实!
fmt.Println( infomation );
//是unicode吗? 答案:否
fmt.Println( len( infomation ) );
fmt.Printf("%x", infomation);
}
输出的結果是:
中
3
e4b8ad
golang中怎么样python一样, 有unicode string literals呢? 答案: 没有!
只有使用函数得到。
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.