持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情
一、基础语法补充
1. switch
package main
import (
"fmt"
"os"
)
//从命令输入参数,在switch中进行处理
func main() {
//C: argc , **argv
//Go: os.Args ==> 直接可以获取命令输入,是一个字符串切片 []string
cmds := os.Args
//os.Args[0] ==> 程序名字
//os.Args[1] ==> 第一个参数 ,以此类推
for key, cmd := range cmds {
fmt.Println("key:", key, ", cmd:", cmd, ", cmds len:", len(cmds))
}
if len(cmds) < 2 {
fmt.Println("请正确输入参数!")
return
}
switch cmds[1] {
case "hello":
fmt.Println("hello")
//go 的switch, 默认加上break了,不需要手动处理
//如果想向下穿透的话,那么需要加上关键字: fallthrough
fallthrough
case "world":
fmt.Println("world")
default:
fmt.Println("default called!")
}
}
2. 标签
package main
import "fmt"
func main() {
//标签 LABEL1
//goto LABEL ===> 下次进入循环时,i不会保存之前的状态,重新从0开始计算,重新来过
//continue LABEL1 ===> continue会跳到指定的位置,但是会记录之前的状态,i变成1
//break LABEL1 ==> 直接跳出指定位置的循环
//标签的名字是自定义的,后面加上冒号
LABEL121:
for i := 0; i < 5; i++ {
for j := 0; j < 5; j++ {
if j == 3 {
//goto LABEL1
//continue LABEL1
break LABEL121
//break
}
fmt.Println("i:", i, ",j:", j)
}
}
fmt.Println("over!")
}
3. 枚举const+iota
1.iota是常量组计数器
2.iota从0开始,每换行递增1
3.常量组有个特点如果不赋值,默认与上一行表达式相同
4.如果同一行出现两个iota,那么两个iota的值是相同的
5.每个常量组的iota是独立的,如果遇到const iota会重新清零
在go语言中没有枚举类型,但是我们可以使用const + iota(常量累加器)来进行模拟
package main
import "fmt"
//模拟一个一周的枚举
const (
MONDAY = iota //0
TUESDAY = iota //1
WEDNESDAY = iota //2
THURSDAY //3 ==> 没有赋值,默认与上一行相同iota ==> 3
FRIDAY //4
SATURDAY //5
SUNDAY //6
M, N = iota, iota //const属于预编译期赋值,所以不需要:=进行自动推导
)
const (
JANU = iota + 1 //1
FER //2
MAR //3
APRI //4
)
func main() {
fmt.Println("打印周:")
fmt.Println(MONDAY)
fmt.Println(TUESDAY)
fmt.Println(WEDNESDAY)
fmt.Println(THURSDAY)
fmt.Println(FRIDAY)
fmt.Println("M:", M, ",N:", N)
fmt.Println("打印月份:")
fmt.Println(JANU) //1
fmt.Println(FER) //2
fmt.Println(MAR) //3
//var number int
//var name string
//var flag bool
//
//
////可以使用变量组来将统一定义变量
//var (
// number int
// name string
// flag bool
//)
}
在goland中配置git shell,并且显示中文:
我的安装路径D:\Program Files (x86)\Tools\Git\Git\etc)下bash.bashrc文件
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
git终端显示中午设置:
4. 结构体
在go语言中,使用结构体来模拟类
package main
import "fmt"
//c语言里面,我们可以使用typedef int MyInt
type MyInt int //type相当于typdef
//C:
//struct Person {
//
//}
//go语言结构体使用type + struct来处理
type Student struct {
name string
age int
gender string
score float64
}
func main() {
t1 := struct {
a int
}{
a : 100
}
fmt.Println(t1)
var i, j MyInt
i, j = 10, 20
fmt.Println("i+j:", i+j)
//创建变量,并赋值
lily := Student{
name: "Lily",
age: 20,
gender: "女生",
//score: 80, //最后一个元素后面必须加上逗号,如果不加逗号则必须与}同一行
//}
score: 80} //最后一个元素后面必须加上逗号,如果不加逗号则必须与}同一行
//使用结构体各个字段
fmt.Println("lily:", lily.name, lily.age, lily.gender, lily.score)
//结构体没有-> 操作
s1 := &lily
fmt.Println("lily 使用指针s1.name打印:", s1.name, s1.age, s1.gender, s1.score)
fmt.Println("lily 使用指针(*s1).name打印:", (*s1).name, s1.age, s1.gender, s1.score)
//在定义期间对结构体赋值时,如果每个字段都赋值了,那么字段的名字可以省略不写
//如果只对局部变量赋值,那么必须明确指定变量名字
Duke := Student{
name: "Duke",
age: 28,
//"男生",
// 99,
}
Duke.gender = "男生"
Duke.score = 100
fmt.Println("Duke:", Duke)
}