go 基础知识
应用入口
main 包:package mainmain 方法:func main()main.go应用入口返回值
运行 go run main.go 会输出 exit status 255
func main() {
os.Exit(-1)
}
不能使用 return 的形式
// 错误
func main() {
return -1
}
获取命令行参数
通过 os.Args 获取命令行参数
func main() {
fmt.Println(os.Args)
}
main 函数不支持传入参数
// 错误
func main(arg []string){}
变量声明
var a int = 1var b, c int = 1, 2var (
d int = 1
e int = 2
)
a := 1,只能在函数内部使用常量
const (
C0 = iota
C1
C2
)
fmt.Println(C0, C1, C2) // 0 1 2
iota 第一次出现的时候值是 0
语法糖:如果每句话都差不多,可以省略
const (
C0 = iota
C1 = iota
C2 = iota
)
// 等价于
const (
C0 = iota
C1
C2
)
iota
iota 默认是 0,每行加 1const() 中使用字符串
string 是值类型,默认的初始值是空字符串,不是 nilstring 是只读的 byte slice,len 函数返回的是它所包含的 byte 数,这个 byte 和字符是不一样的string 的 byte 数组可以存放任何数据s := "\xE4\xB8\xA5"
fmt.Println(s) // 严
fmt.Println(len(s)) // 3
Unicode 和 UTF-8
| 字符 | “中” |
|---|---|
Unicode |
0x4E2D |
UTF-8 |
0xE4B8AD |
string/[]byte |
[0xE4, 0xB8, 0xAD] |
rune 可以获取字符的 Unicode
s := "中"
fmt.Println(len(s)) // 3
c := []rune(s)
fmt.Println(len(c)) // 1
fmt.Printf("中 Unicode:%x", c) // 4e2d
fmt.Printf("中 UTF-8:%x", s) // e4b8ad
高效拼接字符串 —— strings.Builder
var builder strings.Builder
for i := 0; i < 10; i++ {
builder.WriteString(strconv.Itoa(i))
}
str := builder.String()
高效拼接字符串 —— bytes.Buffer
var buf bytes.Buffer
for i := 0; i < 10; i++ {
buf.WriteString(strconv.Itoa(i))
}
str := buf.String()
数据类型
boolstringint、int8、int16、int32、int64uint、uint8、uint16、uint32、uint64、uinttptrbyte:alias for uint8rune:alias for int32, represents a Unicode code pointfloat32、float64complex64、complex128类型转换
type MyInt int64
func TestImplicit(t *testing.T){
var a int32 = 1
var b int64
var c MyInt
b = a // 报错
b = int64(a)
c = b // 报错
c = MyInt(b)
}
位运算
&^ 按位清零
1 &^ 0 -> 11 &^ 1 -> 00 &^ 1 -> 00 &^ 0 -> 0如果后面一位是 1 输出为 1;如果后面一位是 0 前面一位是啥,输入就是啥
const (
Readable = 1