go 命令 文件名 要么根据绝对路径去找,要么能在当前cmd路径下找到
go 命令 项目名 去src下找
//表明当前文件是可执行文件
//准确的说:表明当前文件属于可执行程序的根目录,可以加上func main
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("hello world")
time.Sleep(10 * time.Second)
}
5种声明方式:
1 var 变量名... 类型字面量 有默认值,int 0,bool false,string ""
var a,d int
var b string
var c bool
fmt.Println(a) // 0
fmt.Printf("%q\n",b) // ""
fmt.Println(c) // false
fmt.Println(d) // 0
2 var 变量名1... 类型字面量 = 变量值1... 声明变量,给定初始值
var a,v int = 10,100
var b string = "老王"
var c bool = true
fmt.Println(a,b,c,v) // 10 老王 true 100
3.var 变量名1... = 变量值1...
var a,b,c = 100,10,false
fmt.Println(a,reflect.TypeOf(a)) // 100 int
fmt.Println(b,reflect.TypeOf(b)) // 10 int
fmt.Println(c,reflect.TypeOf(c)) // false bool
b = 100
fmt.Println(a==b) //true
4.变量名1... := 变量值1...
适用条件:1.只能用于局部
2.边至少有一个变量未被声明
var a int
b,a := "10",100
fmt.Println(a,reflect.TypeOf(a))
fmt.Println(b,reflect.TypeOf(b))
5 var(
变量名... 类型字面量
变量名1... 类型字面量 = 变量值1...
变量名1... = 变量值1...
)
go var ( a int b string = "隔壁老王" c,d = 10.2,true ) fmt.Println(a,b,c,d)//0 隔壁老王 10.2 true
变量赋值:
1 先声明后使用
2 赋值类型要一直
3 a,b,c = 值1,值2,值3
4 交叉赋值
变量的命名规范:
推荐使用驼峰体
小写开头,只用于本包下使用
大写开头,用于开放
var a,b = 10,100
a,b = b,a
fmt.Println(a,b)//100 10
go 常量 内存权限只读
定义常量的三种方式
const a,b int = 100,10
fmt.Println(a)//100
const c,d = 100,true
fmt.Println(c,d)//100 true
3 const( 常量组 若没有指定类型和值,会继承上面最靠近它的飞空常量,并且列数要相等
....
...
)
const(
a,e int = 10,100
b,f string = "张三","lxxdsb"
c,m
d,n
)
fmt.Println(a,b)
fmt.Println(c,reflect.TypeOf(c))//10 张三
fmt.Println(d,reflect.TypeOf(d))//张三 string
fmt.Println(m,reflect.TypeOf(m))//lxxdsb string
自增常量组:
1? iota 常量计数器 从0开始计数,类型默认为int
2 _ 占位符 占着茅坑不拉shit
3 iota中断 定义一个值
4 iota 恢复 继续写iota ,会继续计数(计数不会中断)
5 多个iota
const (
_ = iota
a
b
c string = "老王"
d = iota
e
f
h
)
fmt.Println(a,b,c) // 1 2 老王
fmt.Println(d,e,f,h)// 4 5 6
type 名字 类型字面量 自定义类型,给类型起别名
6 iota 可以修改类型
7 iota 可以参与运算
type myint int
const (
a myint= iota
b
)
fmt.Println(a,b,reflect.TypeOf(b))//0 1 main.myint
数字与数字间加减乘除,只要其中一个是小数,结果是浮点型,整形与整形,结果一定是整形
程序只会在特定情况下(遇到浮点型,不管是变量还是数字),会把整形数字转成浮点型数字,再进行运算,
但是,不会自动转换整形变量,(常量当做普通数字处理)
//var a = 1+2
//fmt.Println(a,reflect.TypeOf(a))
//var a = 2.1 + 1
//fmt.Println(a,reflect.TypeOf(a))
//var a = 3/2
//fmt.Println(a,reflect.TypeOf(a))
//var a = 10/3
// //fmt.Println(a,reflect.TypeOf(a))
//var a = ((1/2)+0.5)*3
//fmt.Println(a,reflect.TypeOf(a))
//var a = 3
//const b = 2.5
//var c = a/2.5
//fmt.Println(c,reflect.TypeOf(c))
//fmt.Println(true || false && true && false)
//var a = 60
//var b = 13
//// 00001100
//fmt.Println(a&b)
//var a = 100
//var b = &*&a //*类型
//var c = &a
//fmt.Println(b,c)
//fmt.Println(b,reflect.TypeOf(b))
//*b += 200
//fmt.Println(a)
5个知识点
1 if 条件 {
代码体...
}
var age int
// 用户交互,输入年龄
fmt.Scanln(&age)
if age>20 {
fmt.Println("阿姨好")
}else{
fmt.Println("小姐好")
}
2 if-else
3 if-else if - else
4 if嵌套
var score int
fmt.Print("输入你的分数:")
if _, err := fmt.Scanln(&score); err != nil {
fmt.Println("输入有误")
}else{
if score >= 90{
fmt.Println("优秀")
}else if score>= 70{
fmt.Println("良好")
}else{
fmt.Println("挨打!")
}
}
5 if [可执行语句;]条件{ 可执行语句里要是声明变量,只能用短声明
if a:=1;true{
fmt.Println(a)
fmt.Println("我又进来了")
}
2 switch分支选择
一 switch[可执行语句;] 判断量{
case 被判断量1,被判断量2: if 判断量==被判断量1 || 判断量==被判断量2
代码
case 被判断量3:
代码
default:
代码
}
break 基本用不上
fallthrough 放在判断末尾,直接进入下case的代码
var people string
fmt.Print("有人来了:")
fmt.Scanln(&people)
var isugly = true
switch people {
case "帅哥","老板":
fmt.Println("你好呀")
case "姑娘":
if isugly{
fmt.Println("假装没看见")
}else {
fmt.Println("加个微信吧!")
}
default:
fmt.Println("问路请出门右拐")
}
二 switch [可执行语句;]{
case 条件1,条件2...
代码提
case 条件3
代码体
}
switch score := 100; {
case score>=90:
fmt.Println("牛逼")
case score>=80:
fmt.Println("也牛逼")
}
格式:
for 初始条件;循环条件;追加条件{
循环体代码....
}
//var a = 1
//for fmt.Println("我是初始条件");a<=3;fmt.Println("我是追加语句"){
// a += 1
//}
省略形式:
for ;循环条件;追加条件{
循环体代码....
}
for a:=1;a<=3;{
fmt.Printf("我执行了第%v遍\n",a)
a++
}
for 初始条件;循环条件;{
循环体代码....
}
for a:=1;a<=3;{
fmt.Printf("我执行了第%v遍\n",a)
a++
}
for 循环条件{
循环体代码....
}
a:=1
for a<=3{
fmt.Printf("我执行了第%v遍\n",a)
a++
}
for {
循环体代码....
}
是一个死循环
a := 1
for {
fmt.Printf("我执行了第%v遍\n",a)
a++
}
for 循环的退出:
1 break 跳出本层循环
2 continue 结束本次循环,直接进入下一次
3 变量开关
for a,tag:=1,true;tag;a++{
if a==3 {
tag = false
}
fmt.Printf("我执行了第%v遍\n",a)
}
什么是标签:
记录被标签者的信息
在程序中记录当前代码位置
为什么要有标签:
标记不是目的,目的是使用.记录位置是为了快速找到它
怎么用标签:
定义标签: 直接在代码上加上标签名(大写加数字用以和变量区分开),定义了就一定要使用
用标签:
1 break+标签
2 continue + 标签
3 goto + 标签 降低了代码的可读性和可维护性
注意点:
1 只能用于函数内部跳转
2 不能跳过变量声明
LABEL1:
for a:=1;a<=5;a++{
fmt.Printf("外层执行了第%v遍\n",a)
for i:=1;i<=5;i++{
fmt.Printf("内层执行了第%v遍\n",i)
if i == 3{
continue LABEL1
}
}
}
for a:=1;a<=5;a++ {
fmt.Printf("外层执行了第%v遍\n", a)
if a==3{
goto LABEL2
}
}
LABEL2:
fmt.Println("我是label,我被执行了")
fmt.Println("我是label,我被执行了2")
整型:
有符号:int , int8 ,int16,int32,int64
无符号:uint,uint8,uint16,uint32,uint64
int8: -128-127
正常使用:int,int64,uint,uint64
浮点型:
float32,float64
flaot32:显示8位,精确到7位
float64:显示17位,精确到16位(含整数位)
强制类型转换:
数字类型和数字类型之间进行转换,转换类型要能够完全表示被转换类型
var a int64 = 1111111
var b int8 = int8(a)
fmt.Println(b,reflect.TypeOf(b))// 71 int8
字符串类型:
string
strings包:字符串常用操作
str := "我真的真的真的真的很帅"
fmt.Println(strings.HasPrefix(str, "我"))// true
fmt.Println(strings.HasPrefix(str,"你"))// false
fmt.Println("----------------")
2 以....结尾
HasSuffix(str,"...")
fmt.Println(strings.HasSuffix(str,"帅"))// true
fmt.Println(strings.HasSuffix(str,"丑"))//false
fmt.Println("----------------")
3 是否包含....
Contains(str,"....")
fmt.Println(strings.Contains(str,"真的"))//ture
fmt.Println(strings.Contains(str,"假的"))//false
fmt.Println("----------------")
4 是否包含...中任意字符
ContainsAny(str,"....")
fmt.Println(strings.ContainsAny(str,"真的"))
fmt.Println(strings.ContainsAny(str,"你的"))
fmt.Println("----------------")
5 查找...的第一次出现的索引
Index(str,"....")
fmt.Println(strings.Index(str,"假的"))//-1
fmt.Println(strings.LastIndex(str,"真的"))//22
fmt.Println(strings.LastIndex(str,"1"))//-1
fmt.Println("----------------")
6 查找...的最后一次出现的索引
LastIndex(str,"....")
fmt.Println("----------------")
fmt.Println(strings.LastIndex(str,""))//33
fmt.Println("----------------")
7 替换
Replace(str,oldstr,newstr,n)
fmt.Println(strings.Replace(str,"真的","超级",1))//我超级真的真的真的很帅
fmt.Println(strings.Replace(str,"真的","超级",2))//我超级超级真的真的很帅
fmt.Println(strings.Replace(str,"真的","超级",-1))//我超级超级超级超级很帅
fmt.Println("----------------")
8 统计字符串出现次数
Count(str,"...")
fmt.Println(strings.Count(str,"真的"))//4
fmt.Println(strings.Count(str,""))//12
fmt.Println(strings.Count(str,"dsb"))//0
fmt.Println("字符个数:",strings.Count(str,"")-1)//11
9 大小写转换
ToUpper(str)/ToLower(str)
str2 := "老s王dSB abs BS"
fmt.Println(strings.ToUpper(str2))//老S王DSB ABS BS
fmt.Println(strings.ToLower(str2))//老s王dsb abs bs
fmt.Println(strings.ToTitle(str2))//老S王DSB ABS BS
10 去除指定字符(首/尾)
Trim(str,"...")
TrimLeft()
TrimRight()
TrimSpace(str)
11 分割
Split(str,"...") 根据指定分隔符号,转成切片[a b c d]
go str4:="a,b,c,d" fmt.Println(strings.Split(str4,","))//[a b c d]
12 拼接
Join(字符串切片,"拼接符")
myslice := strings.Split(str4,",")
fmt.Println(strings.Join(myslice,"@"))//a@b@c@d
原文:https://www.cnblogs.com/gongcheng-/p/10872140.html