目录
开发平台
开发工具:VSCode
Go版本:1.21.7 Winsows 64位
一、String转基本数据类型
代码:
package main
import (
"fmt"
"strconv"
)
func main() {
var str string = "true"
var b bool
//1. strconv.ParseBool(str)函数会返回两个值(value bool, err error)
//2. 因为这里只需要获取value bool,不想获取err,所以使用 _ 忽略
b, _ = strconv.ParseBool(str)
fmt.Printf("b type %T b=%v\n", b, b)
var str2 string = "123456789"
var n1 int64
var n2 int
n1, _ = strconv.ParseInt(str2, 10, 64)
n2 = int(n1)
fmt.Printf("n1 type %T n1=%v\n", n1, n1)
fmt.Printf("n2 type %T n2=%v\n", n2, n2)
var str3 string = "123.456"
var f1 float64
f1, _ = strconv.ParseFloat(str3, 64)
fmt.Printf("f1 type %T f1=%v\n", f1, f1)
//当string类型无法转成有效数据,回返回对应类型的默认值
var str4 string = "hello"
var n3 int64
n3, _ = strconv.ParseInt(str4, 10, 64)
fmt.Printf("n3 type %T n3=%v\n", n3, n3)
//当int64被赋值时,若string无法顺利转成int64,仍会被置为默认值
var n4 int64 = 11
n4, _ = strconv.ParseInt(str4, 10, 64)
fmt.Printf("n4 type %T n4=%v\n", n4, n4)
}
运行结果:
二、运算符
1. 算数运算符
package main
import "fmt"
func main() {
//说明,如果运算的数都是整数,那么除后,去掉小数部分,保留整数部分
fmt.Println(10 / 4) // =2
var n1 float32 = 10 / 4
fmt.Println(n1) // =2
//如果希望保留小数部分,则需要浮点数参与运算
var n2 float32 = 10.0 / 4
fmt.Println(n2) // =2.5
}
2. 取模
package main
import "fmt"
func main() {
//公式:a % b = a - (a / b) * b
fmt.Println("10%3=", 10 % 3) // =1
fmt.Println("-10%3=", -10 % 3) // =-1
fmt.Println("10%-3=", 10 % -3) // =1
fmt.Println("-10%-3=", -10 % -3) // =-1
}
3. 赋值运算符
要求:有两个变量,a和b,要求将其进行交换,但是不允许使用中间变量。
package main
import "fmt"
func main() {
var a int = 10
var b int = 20
a = a + b
b = a - b
a = a - b
fmt.Printf("a=%v b=%v", a,b)
}
三、switch
1. case后面可跟多个表达式
package main
import (
"fmt"
)
func main() {
var n1 int32 = 51
var n2 int32 = 20
var n3 int32 = 5
switch n1 {
case n2, 10, 5: // case后面可以有多个表达式
fmt.Println("ok1")
case n3: // 若直接写成 case 5,则会报错
fmt.Println("ok2")
}
}
2. switch后可以不带表达式
package main
import (
"fmt"
)
func main() {
// switch后可以不带表达式,类似 if --else分支来使用
var age int = 10
switch{
case age == 10:
fmt.Println("age == 10")
case age == 20:
fmt.Println("age == 20")
default:
fmt.Println("没有匹配到")
}
}
3. switch后可直接声明/定义一个变量,分号结束
package main
import (
"fmt"
)
func main() {
switch grade := 90; {
case grade > 90:
fmt.Println("成绩优秀")
case grade >= 70 && grade <= 90:
fmt.Println("成绩优良")
case grade >= 60 && grade <= 70:
fmt.Println("成绩及格")
default:
fmt.Println("不及格")
}
}
4. switch穿透 fallthrough
package main
import (
"fmt"
)
func main() {
var num int32 = 10
switch num {
case 10:
fmt.Println("ok1")
fallthrough // 默认只能穿透一层,会穿透到下一层,输出“ok1”和“ok2”
case 20:
fmt.Println("ok2")
default:
fmt.Println("没有匹配到")
}
}
四、for-range
package main
import "fmt"
func main() {
str := "hello world!"
for index, val := range str {
fmt.Printf("index=%d, val=%c \n", index, val)
}
}
五、空心金字塔
代码:
package main
import "fmt"
func main() {
var totalLevel int = 10
// i 表示层数
for i := 1; i <= totalLevel; i++ {
// 在打印前先输出空格
for k := 1; k <= totalLevel-i; k++ {
fmt.Print(" ")
}
// j表示每层打印多少*
for j := 1; j <= 2*i-1; j++ {
if j == 1 || j == 2*i-1 || i == totalLevel {
fmt.Print("*")
} else {
fmt.Print(" ")
}
}
fmt.Println()
}
}
运行结果: