string类型与其他类型转换
func main() {
var s1 string = "true"
var b bool
//strconv.ParseBool(str) 函数会有两个返回值(value bool, err error)
//使用 " _ " ,忽略 err 类型的返回值
b, _ = strconv.ParseBool(s1)
fmt.Printf("b type %T\tb = %v\n", b, b)
var s2 string = "1234567890"
var i1 int64
//ParseInt(str,__进制,int_位数),返回值(i int64, err error)
i1, _ = strconv.ParseInt(s2, 10, 64)
fmt.Printf("i type %T\ti = %v\n", i1, i1)
var s3 string = "123.456"
var f1 float64
//ParseFloat(str,_位数),返回值(f float64, err error)
f1, _ = strconv.ParseFloat(s3, 64)
fmt.Printf("f type %T\tf = %v\n", f1, f1)
}
-
对于不能转换的内容转换时,golang将其直接转换为默认值(数值型转为0,bool型转为false)
-
func main() { var num int = 50 fmt.Printf("num地址:%v\n", &num) var ptr *int = &num *ptr = 100 fmt.Printf("num = %v,ptr = %v\n", num, ptr) fmt.Printf("ptr的地址%v\n", &ptr) } -
break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var -
首字母大写为公开,小写为私有
-
++、-- 只能独立使用,不能放在语句中
-
分类 描述 关联性 后缀 () [] -> . ++ -- 从左到右 单目 + - ! ~ (type) * & sizeof 从右到左 乘法 * / % 从左到右 加法 + - 从左到右 移位 << >> 从左到右 关系 < <= > >= 从左到右 相等(关系) == != 从左到右 按位and & 从左到右 按位xor 从左到右 按位or | 从左到右 逻辑and && 从左到右 逻辑or || 从左到右 赋值运算符 = += -= *= /= %= >>= <<= &= ^= |= 从右到左 逗号 , 从左到右 -
输入格式**
fmt.Scanln(&地址)**,括号内填入接受变量的地址 -
支持在if中定义变量,**
} else {**不允许换行if age := 20; age > 18 { //条件不需要加括号 fmt.Println("成年了") } -
if条件内不允许出现**
if b = false**这种赋值语句 -
switch语句case后不需要**
break**语句,默认case最后为break; -
case后的表达式可以为多个用**
' , '**隔开,可以是常量、变量、一个有返回值的函数; -
case后的数据类型与switch后表达式的数据类型
相同var num1 int32 = 10 var num2 int32 = 20 switch num1 { case num2, 5, 10: //数据类型相同即可 fmt.Println("Yes") default: //允许没有default fmt.Println("NO") } -
case后的值如果是常量则不允许重复
-
var num int = 10 //当作if...else分支使用 switch { case num == 10: fmt.Println("Yes") default: fmt.Println("NO") } var score int = 90 switch { case score > 90: fmt.Println("优秀") case score > 75 && score <= 90: fmt.Println("良好") case score >= 60 && score < 75: fmt.Println("及格") default: fmt.Println("不及格") } -
switch穿透;默认穿透一层
-
Type Switch:switch语句还可以被用于type-switch来判断某个interface变量中实际指向的变量类型
-
循环结构标准写法与特有写法
// 1 str1 := "hello~world!" for i := 0; i < len(str1); i++ { //无法识别中文 fmt.Printf("val = %c\n", str1[i]) } // 1改 str1 := "hello~world!" t := []rune(str1) //[]rune方法接收,可以识别中文 for i := 0; i < len(t); i++ { fmt.Printf("val = %c\n", t[i]) } // 2 str2 := "hello~world" for index, val := range str2 { //识别全部类型 fmt.Printf("index = %d val = %c\n", index, val) } -
for-range是按照字符的方式遍历,可以接收输出中文
-
go没有while和do...while语法
-
生成随机数
rand.Seed(time.Now().Unix()) num := rand.Intn(100) + 1 //rand.Intn(n)的范围[0,n) fmt.Println(num) //rand.Intn(100) + 1的范围[1,100) -
break跳出最近for循环;break lable
n跳出标记n之后的循环 -
continue跳出最近for循环的本次循环;continue lable
n跳过标记n之后的这本次for循环 -
goto lable
n跳转到指定**lablen:**的位置,尽量不使用 -
func 函数名(形参列表)(返回值列表){
执行语句
return 返回值列表
} -
引用时,被引用函数首字母大写,
包名.函数名 -
包名过长支持使用别名,使用别名后原名不可用
import{ BB "GoDemo/chapter01/demo01/model" } -
renturn可以接受的多个返回值,不需要的位置可以使用**
_**占位 -
go不支持函数重载