应用入口
main
包:package main
main
方法: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 = 1
var b, c int = 1, 2
var (
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
,每行加 1
const()
中使用字符串
string
是值类型,默认的初始值是空字符串,不是 nil
string
是只读的 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()
数据类型
bool
string
int
、int8
、int16
、int32
、int64
uint
、uint8
、uint16
、uint32
、uint64
、uinttptr
byte
:alias for uint8
rune
:alias for int32
, represents a Unicode code pointfloat32
、float64
complex64
、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
-> 1
1 &^ 1
-> 0
0 &^ 1
-> 0
0 &^ 0
-> 0
如果后面一位是 1
输出为 1
;如果后面一位是 0
前面一位是啥,输入就是啥
const (
Readable = 1