Go 学习笔记(2) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
xiangdong1987
V2EX    Go 编程语言

Go 学习笔记(2)

  •  
  •   xiangdong1987 2019-05-05 09:27:49 +08:00 2785 次点击
    这是一个创建于 2434 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Go 数据类型有如下类型。

    • 基础类型
    • 符合类型
    • 引用类型
    • 接口类型 类型内容很多只能慢慢学习,今天学习基础类型。

    基础类型

    • 数字

      • 有符号无符号
      • Unicode 字符 rune 类型是和 int32 等价的类型
      • byte 也是 uint8 类型的等价类型
      • 计算溢出 高位截断
      var u uint8 = 255 fmt.Println(u, u+1, u*u) // "255 0 1" var i int8 = 127 fmt.Println(i, i+1, i*i) // "127 -128 1" 
      • 位运算
      var x uint8 = 1<<1 | 1<<5var y uint8 = 1<<1 | 1<<2 fmt.Printf("%08b\n", x) // "00100010", the set {1, 5} fmt.Printf("%08b\n", y) // "00000110", the set {1, 2} fmt.Printf("%08b\n", x&y) // "00000010", the intersection {1} fmt.Printf("%08b\n", x|y) // "00100110", the union {1, 2, 5} fmt.Printf("%08b\n", x^y) // "00100100", the symmetric difference {2, 5} fmt.Printf("%08b\n", x&^y) // "00100000", the difference {5} for i := uint(0); i < 8; i++ { if x&(1<<i) != 0 { // membership test fmt.Println(i) // "1", "5" } } fmt.Printf("%08b\n", x<<1) // "01000100", the set {2, 6} fmt.Printf("%08b\n", x>>1) // "00010001", the set {0, 4} 
      • 浮点型

        一个 float32 类型的浮点数可以提供大约 6 个十进制数的精度,而 float64 则可以提供约 15 个十进制数的精度;通常应该优先使用 float64 类型,因为 float32 类型的累计计算误差很容易扩散,并且 float32 能精确表示的正整数并不是很大(译注:因为 float32 的有效 bit 位只有 23 个,其它的 bit 位用于指数和符号;当整数大于 23bit 能表达的范围时,float32 的表示将出现误差)

    • 字符串:一个字符串是一个不可改变的字节序列

      • 不变性意味如果两个字符串共享相同的底层数据的话也是安全的,这使得复制任何长度的字符串代价是低廉的
      • 编码:编码是一个基础,但是很复杂的东西,很多原理都跟编码有关。
        • ASC II:是最初的编码定义,用一个字节来表示 0-127 表示英文和符号
        • Unicode:随着计算机的广泛使用,其他国家的语言和文字需要展示,一个字节不够用了所以用 4 个字节来保存,诞生了 unicode 编码,至今 unicode 已经 120000 的字符了
        • Unicode 官方
        • UTF-8:由于 unicode 需要 4 个字节,有字符实际用不到这么多存储为,但是占用了这么的空间很浪费,所以 UTF-8 可变长字编码格式产生了,它位不同的长度的 Uicode 编码使用不用的表示方式。如下
        0xxxxxxx runes 0-127 (ASCII) 110xxxxx 10xxxxxx 128-2047 (values <128 unused) 1110xxxx 10xxxxxx 10xxxxxx 2048-65535 (values <2048 unused) 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 65536-0x10ffff (other values unused) 
        • Go 语言的 range 循环在处理字符串的时候,会自动隐式解码 UTF8 字符串
      • 标准库中四个重要的库
        • btyes:btye 的查找,替换,比较,截取,拆分,合并等功能
          • 因为字符串是只读的,因此逐步构建字符串会导致很多分配和复制
        • strings:字符串 btye 的查找,替换,比较,截取,拆分,合并等功能
        • strconv:字符串转化
        • unicode:给字符分类
    • 布尔:没有什么特别注意的,就是要讲数字当 bool 值需要做一个函数转换

      func itob(i int) bool { return i != 0 } ``` 
    • 常量:常量表达式的值在编译期计算,而不是在运行期。

      • iota 可以批量生成常量
      type Weekday int const ( Sunday Weekday = iota Monday Tuesday Wednesday Thursday Friday Saturday ) //复杂例子 const ( _ = 1 << (10 * iota) KiB // 1024 MiB // 1048576 GiB // 1073741824 TiB // 1099511627776 (exceeds 1 << 32) PiB // 1125899906842624 EiB // 1152921504606846976 ZiB // 1180591620717411303424 (exceeds 1 << 64) YiB // 1208925819614629174706176 ) 
      • 无类型常量:我个人理解无类型常量有点像 php 不定义变量类型,系统自动识别,后面学习到接口时有重要的作用。

    总结

    虽然每种语言都有这些类型,但是每种语言在细节处理上有相似也有不同,这些相似和不同就体现出了不同人的思考方式,总之代码是死的,思维是活的。多思考多实践,形成自己的思维体系更重要。

    源自 https://xiangdong1987.github.io/

    2 条回复    2019-05-06 10:11:43 +08:00
    dabaibai
        1
    dabaibai  
       2019-05-05 09:54:13 +08:00
    学过 c 的话 golang 不是手到擒来?
    xiangdong1987
        2
    xiangdong1987  
    OP
       2019-05-06 10:11:43 +08:00
    @dabaibai 不要太容易,只要 c 功力深绝对轻松驾驭 go
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1264 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 16:52 PVG 00:52 LAX 08:52 JFK 11:52
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86