Golang 中国

dayn9

Golang China 第 885 号会员,加入于 2013-11-14 09:11


dayn9最近创建的主题


22 interface{}与nil,违背了==的传递性
Go语言笑话dayn9 • 2018-04-09 15:33 • 最后回复来自 flym03
9 请教如何计算字符串的显示宽度
Web开发dayn9 • 2014-08-30 11:53 • 最后回复来自 snake117
5 Go有希望支持dll/so吗?
开发工具dayn9 • 2014-08-19 15:44 • 最后回复来自 engin123456789
2 可否关掉goroutine的抢占调度
社区开发dayn9 • 2014-07-30 08:34 • 最后回复来自 dayn9
9 可否在struct上使用for range
问与答dayn9 • 2014-08-19 01:27 • 最后回复来自 kzzhr
1 如何序列化channel内的数据
Web开发dayn9 • 2014-01-29 16:00 • 最后回复来自 andot
dayn9 创建的更多主题

dayn9最近回复了


回复了 dayn9 创建的主题: interface{}与nil,违背了==的传递性 2014-08-28 23:12

浮点数的问题,目前在不牺牲性能的情况下绝无解决可能,是硬缺陷,而这里探讨的是语言设计的软问题,无可比性。楼上情况到有相似性,不过b == c毕竟不能比,其提示作用要鲜明得多。退一步说,假设两者便斤八两,但拿世界上坑最多的语言来佐证另一个语言的坑的合理性,恐怕欠说服力。

我也并非不知道是怎么回事,只是困惑于是不是有更好的解决方案。

回复了 dayn9 创建的主题: 请教如何计算字符串的显示宽度 2014-08-27 10:12

我的需求就是多种文字,在控制台排版输出,不涉及非等宽字体。

谢谢各位,我前文提到的方法适用于常见的东亚文字,也算基本解决问题了,如果要适用更多的文字,在需要查表和实验了。下面是我找到的编码表,或许有同学需要:

var Unicode = [][]rune{
    {0x0020, 0x007F},     // Basic Latin 基本拉丁字母
    {0x00A0, 0x00FF},     // Latin-1 Supplement 拉丁字母补充-1
    {0x0100, 0x017F},     // Latin Extended-A 拉丁字母扩充-A
    {0x0180, 0x023F},     // Latin Extended-B 拉丁字母扩充-B
    {0x0250, 0x02AF},     // IPA Extensions 国际音标扩充
    {0x02B0, 0x02EF},     // Spacing Modifier Letters 进格修饰字符
    {0x0300, 0x036F},     // Combining Diacritical Marks 组合音标附加符号
    {0x0370, 0x03FF},     // Greek and Coptic 希腊字母
    {0x0400, 0x04FF},     // Cyrillic 西里尔字母
    {0x0500, 0x052F},     // Cyrillic Supplement 西里尔字母补充
    {0x0530, 0x058F},     // Armenian 亚美尼亚文
    {0x0590, 0x05FF},     // Hebrew 希伯来文
    {0x0600, 0x06FF},     // Arabic 基本阿拉伯文
    {0x0700, 0x074F},     // Syriac 叙利亚文
    {0x0750, 0x077F},     // Arabic Supplement 阿拉伯文补充
    {0x0780, 0x07BF},     // Thaana 塔纳文
    {0x07C0, 0x07FF},     // N’Ko
    {0x0900, 0x097F},     // Devanagari 天城体梵文字母
    {0x0980, 0x09FF},     // Bengali 孟加拉国文
    {0x0A00, 0x0A7F},     // Gurmukhi 古尔穆基文
    {0x0A80, 0x0AFF},     // Gujarati 古吉拉特文
    {0x0B00, 0x0B7F},     // Oriya 奥里亚文
    {0x0B80, 0x0BFF},     // Tamil 泰米尔文
    {0x0C00, 0x0C7F},     // Telugu 泰卢固文
    {0x0C80, 0x0CFF},     // Kannada 卡纳达文
    {0x0D00, 0x0D7F},     // Malayalam 马拉亚拉姆文
    {0x0D80, 0x0DFF},     // Sinhala 僧伽罗文
    {0x0E00, 0x0E7F},     // Thai 泰文
    {0x0E80, 0x0EFF},     // Lao 老挝文;寮国文
    {0x0F00, 0x0FFF},     // Tibetan 藏文
    {0x1000, 0x109F},     // Myanmar 缅甸文
    {0x10A0, 0x10FF},     // Georgian 格鲁吉亚文
    {0x1100, 0x11FF},     // Hangul Jamo 谚文字母
    {0x1200, 0x137F},     // Ethiopic 埃塞俄比亚文
    {0x1380, 0x139F},     // Ethiopic Supplement 埃塞俄比亚文补充
    {0x13A0, 0x13FF},     // Cherokee 切罗基文
    {0x1400, 0x167F},     // Unified Canadian Aboriginal Syllabics 加拿大土著统一音节文字
    {0x1680, 0x169F},     // Ogham 欧甘文
    {0x16A0, 0x16FF},     // Runic 北欧古文
    {0x1700, 0x171F},     // Tagalog 他加禄文
    {0x1720, 0x173F},     // Hanunoo 哈努诺文
    {0x1740, 0x175F},     // Buhid 布什德文
    {0x1760, 0x177F},     // Tagbanwa 塔格巴努亚文
    {0x1780, 0x17FF},     // Khmer 高棉文
    {0x1800, 0x18AF},     // Mongolian 蒙古文
    {0x1900, 0x194F},     // Limbu 林布文
    {0x1950, 0x197F},     // Tai Le 傣哪文;德宏傣文
    {0x1980, 0x19DF},     // New Tai Lue 新傣仂文
    {0x19E0, 0x19FF},     // Khmer Symbols 高棉符号
    {0x1A00, 0x1A1F},     // Buginese 布吉文
    {0x1B00, 0x1B7F},     // Balinese 巴利文
    {0x1D00, 0x1D7F},     // Phonetic Extensions 音标扩充
    {0x1D80, 0x1DBF},     // Phonetic Extensions Supplement 音标扩充补充
    {0x1DC0, 0x1DFF},     // Combining Diacritical Marks Supplement 组合音标附加符号
    {0x1E00, 0x1EFF},     // Latin Extended Additional 拉丁字母扩充附加
    {0x1F00, 0x1FFF},     // Greek Extended 希腊文扩充
    {0x2000, 0x206F},     // General Punctuation 一般标点符号
    {0x2070, 0x209F},     // Superscripts and Subscripts 下标及上标
    {0x20A0, 0x20CF},     // Currency Symbols 货币符号
    {0x20D0, 0x20FF},     // Combining Diacritical Marks for Symbols 符号用组合附加符号
    {0x2100, 0x214F},     // Letterlike Symbols 似字母符号
    {0x2150, 0x218F},     // Number Forms 数字形式
    {0x2190, 0x21FF},     // Arrows 箭头符号
    {0x2200, 0x22FF},     // Mathematical Operators 数学运算符号
    {0x2300, 0x23FF},     // Miscellaneous Technical 混合专门符号
    {0x2400, 0x243F},     // Control Pictures 控制图像
    {0x2440, 0x245F},     // Optical Character Recognition 光学字符识别
    {0x2460, 0x24FF},     // Enclosed Alphanumerics 括号字母数字
    {0x2500, 0x257F},     // Box Drawing 制表符
    {0x2580, 0x259F},     // Block Elements 区块组件
    {0x25A0, 0x25FF},     // Geometric Shapes 几何形状
    {0x2600, 0x26FF},     // Miscellaneous Symbols 混合什锦符号
    {0x2700, 0x27BF},     // Dingbats 什锦符号
    {0x27C0, 0x27EF},     // Miscellaneous Mathematical Symbols,0xA 混合数学符号-A
    {0x27F0, 0x27FF},     // Supplemental Arrows-A 补充性箭头符号-A
    {0x2800, 0x28FF},     // Braille Patterns 盲文;盲人点字
    {0x2900, 0x297F},     // Supplemental Arrows-B 补充性箭头符号-B
    {0x2980, 0x29FF},     // Miscellaneous Mathematical Symbols-B 混合数学符号-B
    {0x2A00, 0x2AFF},     // Supplemental Mathematical Operators 补充性数学运算符号
    {0x2B00, 0x2BFF},     // Miscellaneous Symbols and Arrows 混合什锦符号和箭头符号
    {0x2C00, 0x2C5F},     // Glagolitic 格拉戈尔字母
    {0x2C60, 0x2C7F},     // Latin Extended-C 拉丁字母扩充-C
    {0x2C80, 0x2CFF},     // Coptic 科普特文
    {0x2D00, 0x2D2F},     // Georgian Supplement 格鲁吉亚文补充
    {0x2D30, 0x2D7F},     // Tifinagh 提非纳格字母
    {0x2D80, 0x2DDF},     // Ethiopic Extended 埃塞俄比亚文扩充
    {0x2E00, 0x2E7F},     // Supplemental Punctuation 补充性标点符号
    {0x2E80, 0x2EFF},     // CJK Radicals Supplement 中日韩部首补充
    {0x2F00, 0x2FDF},     // Kangxi Radicals 康熙部首
    {0x2FF0, 0x2FFF},     // Ideographic Description Characters 汉字结构描述字符
    {0x3000, 0x303F},     // CJK Symbols and Punctuation 中日韩符号和标点
    {0x3040, 0x309F},     // Hiragana 平假名
    {0x30A0, 0x30FF},     // Katakana 片假名
    {0x3100, 0x312F},     // Bopomofo 注音符号
    {0x3130, 0x318F},     // Hangul Compatibility Jamo 谚文兼容字母
    {0x3190, 0x319F},     // Kanbun 汉文标注号
    {0x31A0, 0x31BF},     // Bopomofo Extended 注音符号扩充
    {0x31C0, 0x31EF},     // CJK Strokes 中日韩笔画部件
    {0x31F0, 0x31FF},     // Katakana Phonetic Extensions 片假名音标扩充
    {0x3200, 0x32FF},     // Enclosed CJK Letters and Months 中日韩括号字母及月份
    {0x3300, 0x33FF},     // CJK Compatibility 中日韩兼容字符
    {0x3400, 0x4DBF},     // CJK Unified Ideographs Extension A 中日韩统一表意文字扩充A
    {0x4DC0, 0x4DFF},     // Yijing Hexagram Symbols 易经六十四卦象
    {0x4E00, 0x9FFF},     // CJK Unified Ideographs 中日韩统一表意文字
    {0xA000, 0xA48F},     // Yi Syllables 彝文音节
    {0xA490, 0xA4CF},     // Yi Radicals 彝文字母
    {0xA700, 0xA71F},     // Modifier Tone Letters 声调符号
    {0xA720, 0xA7FF},     // Latin Extended-D 拉丁字母扩充-D
    {0xA800, 0xA82F},     // Syloti Nagri
    {0xA840, 0xA87F},     // Phags-pa 八思巴字母
    {0xAC00, 0xD7AF},     // Hangul Syllables 谚文音节
    {0xD800, 0xDB7F},     // High Surrogates 高半代用区
    {0xDB80, 0xDBFF},     // High Private Use Surrogates 高半专用代用区
    {0xDC00, 0xDFFF},     // Low Surrogates 低半代用区
    {0xE000, 0xF8FF},     // Private Use Area 专用区
    {0xF900, 0xFAFF},     // CJK Compatibility Ideographs 中日韩兼容表意文字
    {0xFB00, 0xFB4F},     // Alphabetic Presentation Forms 字母变体显现形式
    {0xFB50, 0xFDFF},     // Arabic Presentation Forms-A 阿拉伯文变体显现形式-A
    {0xFE00, 0xFE0F},     // Variation Selectors 字型变换选取器
    {0xFE10, 0xFE1F},     // Vertical Forms 竖式标点
    {0xFE20, 0xFE2F},     // Combining HalF},// Marks 组合半角标示
    {0xFE30, 0xFE4F},     // CJK Compatibility Forms 中日韩相容形式
    {0xFE50, 0xFE6F},     // Small Form Variants 小写变体
    {0xFE70, 0xFEFF},     // Arabic Presentation Forms-B 阿拉伯文变体显现形式-B
    {0xFF00, 0xFFEF},     // Halfwidth and Fullwidth Forms 半角及全角字符
    {0xFFF0, 0xFFFF},     // Specials 特殊区域
    {0x10000, 0x1007F},   // Linear B Syllabary 线形文字B音节文字
    {0x10080, 0x100FF},   // Linear B Ideograms 线形文字B表意文字
    {0x10100, 0x1013F},   // Aegean Numbers 爱琴数字
    {0x10140, 0x1018F},   // Ancient Greek Numbers 古希腊数字
    {0x10300, 0x1032F},   // Old Italic 古意大利文
    {0x10330, 0x1034F},   // Gothic 哥特文
    {0x10380, 0x1039F},   // Ugaritic 乌加里特楔形文字
    {0x103A0, 0x103DF},   // Old Persian 古波斯文
    {0x10400, 0x1044F},   // Deseret 犹他大学音标
    {0x10450, 0x1047F},   // Shavian 肃伯纳字母
    {0x10480, 0x104AF},   // Osmanya
    {0x10800, 0x1083F},   // Cypriot Syllabary 塞浦路斯音节文字
    {0x10900, 0x1091F},   // Phoenician 腓尼基字母
    {0x10A00, 0x10A5F},   // Kharoshthi 佉卢字母
    {0x12000, 0x123FF},   // Cuneiform 楔形文字
    {0x12400, 0x1247F},   // Cuneiform Numbers and Punctuation 楔形文字数字及标点
    {0x1D000, 0x1D0FF},   // Byzantine Musical Symbols 东正教音乐符号
    {0x1D100, 0x1D1FF},   // Musical Symbols 音乐符号
    {0x1D200, 0x1D24F},   // Ancient Greek Musical Notation 古希腊音乐谱记号
    {0x1D300, 0x1D35F},   // Tai Xuan Jing Symbols 太玄经符号
    {0x1D360, 0x1D37F},   // Counting Rod Numerals 算筹记数式
    {0x1D400, 0x1D7FF},   // Mathematical Alphanumeric Symbols 数学用字母数字符号
    {0x20000, 0x2A6DF},   // CJK Unified Ideographs Extension B 中日韩统一表意文字扩充B
    {0x2F800, 0x2FA1F},   // CJK Compatibility Ideographs Supplement 中日韩兼容表意文字补充
    {0xE0000, 0xE007F},   // Tags 语言编码卷标
    {0xE0100, 0xE01EF},   // Variation Selectors Supplement 字型变换选取器补充
    {0xFFF80, 0xFFFFF},   // Supplementary Private Use Area-A 补充专用区-A
    {0x10FF80, 0x10FFFF}, // Supplementary Private Use Area-B 补充专用区-B
}
回复了 dayn9 创建的主题: 请教如何计算字符串的显示宽度 2014-08-24 14:27

@xnotepad,并非指显示时基于像素的矿都,而是指英文占1字符位置,汉字占两个。我知道这个还应该和字体相关,我只是想在控制台某种等宽字体上达到字符串输出对齐。

了解了一下utf8,进行了一次不成功的尝试,我猜测1-2byte表示的字符占用一个字符位,3个以上占用两个。事实上只是在部分情况下正确:


字符串 长度

테스트 텍스트 13 ຂໍ້ຄວາມການທົດສອບ 32 ข้อความทดสอบ 24 κείμενο Test 12 टेस्ट पाठ 17 Kiểm tra văn bản 18 teszt szöveg 12 測試文本 8 测试文本 8 Тест текст 10 テストテキスト 14 ការធ្វើតេស្តអត្ថបទ 36 টেস্ট টেক্সট 23 ટેસ્ટ લખાણ 19

回复了 dayn9 创建的主题: 可否在struct上使用for range 2014-08-18 13:15

看起来楼上的办法是唯一可行的办法了

朴实无华,大概就是要耐得住某种程度上的丑陋

回复了 jimmykuu 创建的主题: coding.net邀请 2014-08-15 01:12

是不是激活后就可以了?我没有项目需要上传,要不要捏造一个项目?

回复了 dayn9 创建的主题: 可否关掉goroutine的抢占调度 2014-07-30 08:34

锁和原子操作是避免操作不会被打断,在单线程情况下,操作中没有调度点,就不会被打断,应该与有锁语义等同。

回复了 dayn9 创建的主题: 可否在struct上使用for range 2014-01-09 15:57

谢谢两位

re @jemygraw,就是你说的这种情况,但:

for i, elem := range list.data

这要求曝露内部的数据表示,程序会依赖于实现而非接口。

我记得ruby和C++都是要求实现特定接口来达到这个目的,所以对Go保佑类似希望,但没查到方法。

回复了 xiaochouyu 创建的主题: 成为主流语言,Golang急需解决的几个问题。 2014-01-09 14:59

语法离无可挑剔还有不少距离,比如泛型的缺乏。泛型并非必不可少,但没有确实挺痛苦,高效可复用的算法和容器就不做指望了。

dayn9 创建的更多回复