go 函数
//字符串的使用
str := "golang你好" //字符串长度 fmt.Println(len(str)) //循环输出 for k, v := range str { fmt.Printf("索引为:%d,具体值为:%c \n", k, v) } //以切片循环展示 r := []rune(str) for i := 0; i < len(r); i++ { fmt.Printf("%c \n", r[i]) } //字符串转整数 fmt.Println(strconv.Atoi("99")) //正数转字符串 fmt.Println(strconv.Itoa(88)) //统计一个字符串有几个指定的字符 fmt.Println(strings.Count("golandan", "ab")) //个数如:0;1; //不区分大小写的字符串比较 fmt.Println(strings.EqualFold("hello111", "HELLO11")) //一样:true,不一样:false //区分大小写字符串比较 fmt.Println("hello" == "hello") //一样:true,不一样:false //返回字符在字符串中第一次出现的索引值,如果没有返回-1 fmt.Println(strings.Index("golandd", "d")) //字符串的替换,字符串,根据哪个值替换,要替换成什么,替换几个(全部替换为负数) fmt.Println(strings.Replace("ggiiig", "g", "0", 1)) //将字符串的字母进行大小写替换 fmt.Println(strings.ToLower("Go")) //转小写 fmt.Println(strings.ToUpper("go")) //转大写 //将字符串左右两边的空格去掉 fmt.Println(strings.TrimSpace(" go and php ")) //将字符串左边指定的字符去掉 fmt.Println(strings.TrimLeft("~golang", "~g")) //将字符串右边指定的字符去掉 fmt.Println(strings.TrimRight("~golang", "ng")) //判断字符串是否以指定的字符串开头 fmt.Println(strings.HasPrefix("http://java.sun.com/jsp", "https")) //一样:true,不一样:false //判断字符串是否以指定的字符串结束 fmt.Println(strings.HasSuffix("demo.png", ".png1")) //一样:true,不一样:false
//时间函数的使用 //时间和日期的函数,需要导入time包,所以你获取当前时间,就需要调用函数Now函数 now := time.Now() //Now()返回值是一个结构体,类型是time.Time fmt.Printf("%T \n", now) //time.Time fmt.Println(now) //2024-03-03 21:48:41.175197 +0800 CST m=+0.000535793 //调用结构体中的方法 fmt.Printf("年:%v \n", now.Year()) //年:2024 fmt.Printf("月:%v \n", now.Month()) //月:March fmt.Printf("月:%v \n", int(now.Month())) //月:3 fmt.Printf("日:%v \n", now.Day()) //日:3 fmt.Printf("时:%v \n", now.Hour()) //时:21 fmt.Printf("分:%v \n", now.Minute()) //分:55 fmt.Printf("秒:%v \n", now.Second()) //秒:56 //Sprintf可以到将字符串,以便后续使用 datestr := fmt.Sprintf("当前年月日:%d-%d-%d 时分秒:%d: %d: %d \n", now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second()) fmt.Println(datestr) //当前年月日:2024-3-3 时分秒:22: 6: 32 //字符串参数是固定的(必须这么写) fmt.Println(now.Format("2006/01/02 15/04/05")) //也可以根据自己选择进行组合:now.Format("2006 15:04")
//数组的使用(赋值) //第一种 var arr1 [3]int = [3]int{3, 5, 1} fmt.Println(arr1) //第二中 var arr2 = [3]int{1, 2, 3} fmt.Println(arr2) //第三种 var arr3 = [...]int{7, 8, 9, 0} fmt.Println(arr3) //第四种 var arr4 = [...]int{2: 4, 1: 5, 3: 6, 0: 7} fmt.Println(arr4)
//利用指针修改数组的值
func main() {
var arr = [3]int{1, 4, 7}
test(&arr)
fmt.Println(arr)
}
func test(arr *[3]int) {
(*arr)[0] = 7
}
//占位符(%的使用及要表达意思) 通用占位符: %v:按照值的默认格式输出。 %+v:输出结构体时,会添加字段名。 %#v:输出 Go 语法表示的值。 %T:输出变量的类型。 %%:输出百分号。
布尔值占位符: %t:格式化布尔值。
整数占位符: %b:以二进制形式输出。 %c:输出字符。 %d:以十进制形式输出。 %o:以八进制形式输出。 %x:以十六进制形式输出,字母小写。 %X:以十六进制形式输出,字母大写。 %U:Unicode 格式输出。
浮点数占位符: %e:科学计数法,小写 "e"。 %E:科学计数法,大写 "E"。 %f:标准计数法。 %g:根据实际情况选择 %e 或 %f。 %G:根据实际情况选择 %E 或 %f.
字符串和字节切片占位符: %s:输出字符串。 %q:输出带双引号的字符串。 %x:以十六进制形式输出字符串。 %p:以十六进制形式输出指针。
指针占位符: %p:输出指针地址。
宽度和精度: 占位符可以使用数字来控制宽度和精度,如 %5.2f 表示总宽度为 5,小数点后保留 2 位。
//切片的使用 //定义数组 var intarr [9]int = [9]int{1, 4, 2, 7, 8, 9, 6, 4, 3} fmt.Println(intarr) //切片构建在数组之上 //定义一个切片名字为slice,[]动态变化的数组长度不写,int类型,intarr是原数组 //[1:3]切片 - 切出的一段片段 - 索引:从1开始,到3结束(不包含3) - [1,3] var slice []int = intarr[1:3] //等同于:slice := intarr[1:3] fmt.Println(slice) //获取切片的容量;容量可以动态变化 fmt.Println("slice的容量:", cap(slice)) //cap()为内存函数
错误异常处理:(简单事例)
import ( "errors" "fmt" ) func main() { //利用defer + recover来捕获错误,defer后加上匿名函数的调用(方式1) defer func() { //调用recover内置函数,可以捕获错误: err := recover() if err != nil { fmt.Println("捕获错误是:", err) } }() //=========(方式2:) err := recover() if err != nil { fmt.Println("捕获错误是:", err) //终止,不会再往下执行 panic(err) } fmt.Println("21244") //打印结果 fmt.Println(test()) } func test() (err error) { num1 := 10 num2 := 0 //判断验证 if num2 == 0 { //抛出自定义错误(方式3) return errors.New("除数不能为0") } else { result := num1 / num2 fmt.Println(result) return nil } }
其他
//键盘录入 var name int fmt.Printf("请输入第 %d 个学生成绩: ", 1) fmt.Scanln(&name)