通过一段简单go代码打印hello world。
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello, Golang!")
}
我们来逐行解析一下:
var a int // 如果没有赋值,默认为0
var a int = 1 // 声明时赋值
var a = 1 // 声明时赋值
a := 1
msg := "Hello World!"
空值:nil
整型类型: int(取决于操作系统), int8, int16, int32, int64, uint8, uint16, …
浮点数类型:float32, float64(精度类似double)
字节类型:byte (等价于uint8)
字符串类型:string
布尔值类型:boolean,(true 或 false)
var a int8 = 10
var c1 byte = 'a'
var b float32 = 12.2
var msg = "Hello World"
ok := false
go的const关键字:声明常量,与var形成对比。定义格式为:const pi float64 = 3.1415926
也可以省略类型,编译器自动推导(var也可以省略)。
常量组可以声明多个常量,例如:
const (
a = 1
b = 2
c = "hello"
)
常量实现枚举:
const (
Sunday = 0
Monday = 1
Tuesday = 2
Wednesday = 3
Thursday = 4
Friday = 5
Saturday = 6
)
go中,采用utf-8编码,如果是英文字符串,每个字符占一字节,如果是中文字符,每个字符占三字节。
字符串是以 byte 数组形式保存的,一个或多个字节表示一个字符,类型是 uint8,占1个 byte,打印时要转换成string,否则打印的是编码值(这个字节转换成整数值)。但是对于中文,对一个字节的转换并不是所要的中文。
所以对于字符串正确的输出方式:
将string转换为rune数组:
str2 := "Go语言"
runeArr := []rune(str2) //string转换rune
fmt.Println(reflect.TypeOf(runeArr[2]).Kind()) // int32 ,4个字节正确处理中文
fmt.Println(runeArr[2], string(runeArr[2])) // 35821 语
fmt.Println("len(runeArr):", len(runeArr)) // len(runeArr): 4
go语言中len函数用于获取各种数据类型的长度。
声明数组
var arr [5]int // 一维
var arr2 [5][5]int // 二维
声明时初始化
var arr = [5]int{1, 2, 3, 4, 5}
//或者arr := [5]int{1, 2, 3, 4, 5}
数组长度不能改变,拼接数组或者取子数组,可以使用切片。切片包含容量,长度,指向底层数组的指针。
声明切片
//使用[]声明
slice := []int{}
//根据数组生成切片,整个数组或子数组
slice := arr[:]
//slice := arr[1:3]
//用make函数声明
slice := make([]int , 3 , 5) //3是长度(必须),5是容量(可选)
make用于创建和初始化内置的数据类型(切片[]T,映射map[K]T,通道channel)。这些数据类型使用前需要初始化。
//切片
make([]T , len , cap)
//map
make(map[k]v)
//channel
make(chan T ,buffer - size)
使用切片
append函数第二个参数接收一个或者多个要添加到第一个切片里的元素,可以在另一个切片后加…用于展开切片。
slice3 := append(slice1 , slice2...) //拼接切片
//声明
m := make(map[int]int)
//声明时初始化
m1 := map[int]int{ 1:1 , 2:2 }
//修改
m1[1] = 2
指针也是变量,*string类型
str := "string"
var p *string = &str
*p = "hello"
//指针用于函数传参
func add(num *int){
*num+=1
}
没有小括号
if 判断 {
}else{
}
没有了小括号和赋值时有区别。
for i:=0;i<10;i++{
}
默认不向下执行,不需要break,需要向下执行则需要fallthrough。
type Gender int8 //用int8作为gender底层
const (
MALE Gender = 1 //定义的两个常量是gender类型的,12区分性别
FEMALE Gender = 2
)
gender := MALE
switch gender {
case FEMALE:
fmt.Println("female")
case MALE:
fmt.Println("male")
default:
fmt.Println("unknown")
}