整数
整数操作
& 位运算 AND| 位运算 OR^ 位运算 XOR 异或&^ 位清空<< 左移>> 右移
如果作为二元运算符,运算符^表示按位异或;若作为一元前缀运算符,就表示按位取反。
&^: 表达式 z=x&^y中,若y的某位是1,则z的对应为是0;否则,就等于x的对应位的值
var x uint8 = 1 << 1 | 1 << 5var y uint8 = 1 << 1| 1 << 2fmt.Printf("%08b\n", x)fmt.Printf("%08b\n", y)fmt.Printf("%08b\n", x&y)fmt.Printf("%08b\n", x|y)fmt.Printf("%08b\n", x^y)fmt.Printf("%08b\n", x&^y)001000100000011000000010001001100010010000100000
还有复数,浮点数相关略过
字符串
字符串截取
s := "abc"a := s[0:1]s[:]s[1:]s[:1]
字符串不变性
s := "left foot"t := ss += ", right foot"fmt.Println(s)fmt.Println(t)left foot, right footleft foot
s := "left foot"t := ss += ", right foot"t = sfmt.Println(s)fmt.Println(t)left foot, right footleft foot, right foot
这个并不改变s原有字符串的值,只是将+=语句生成的新字符串赋予了s。同时t仍然持有原先的字符串的值,除非再进行一次变量的赋值。因为字符串不可改变,所以以下操作会存在编译错误
s[0] = "a"
不可变意味着两个字符串能安全的共用同一段底层内存,使得复制任何长度字符串的开销都很低廉。生成子串的操作也同样低廉
字符串字面量
类似于scala中定义””” “”” 包裹的字符串
const ToDOList = `1. xxxx2. wwww`
字符串和字节slice互换
s := "abc"b := []byte(s)s2 := string(b)
[]byte(s)转换操作会分配新的字节数组,拷贝s含有的字节,并生成一个slice引用,指向整个数组,在修改数组后,原字符串并不会收到影响
字符串和数字互换
- sprintf
x := 123y := fmt.Sprintf("%d", x)
类似于java中的string.format
- strconv
将整数转换为十进制字符串形式strconv.Itoa(x)strconv.FormatInt(int64(x), 2) 按不同的进位制格式化数字效果类似于下fmt.Sprintf("%b", x)
从字符串解析成数字
x, err = strconv.Atoi("123")y, err = strconv.ParseInt("123", 10, 64) 十进制,最长为64位
参考:
