package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
//统计字符串的长度,按字节进行统计(中文是3字节)
str := "hello 你好啊"
fmt.Printf("这个%s的长度是%d\n", str, len(str))
//字符串遍历
//1.for-range键值循环:
for i, value := range str {
fmt.Printf("索引为%d,长度为%d\n", i, value)
}
//2.r:=[]rune(str) 切片方式
r := []rune(str)
for i := 0; i < len(r); i++ {
fmt.Printf("%c", r[i])
}
//字符串转整数
str = "123"
int1, _ := strconv.Atoi(str)
fmt.Printf("%T\n", int1)
//证书转字符串
str1 := strconv.Itoa(int1)
fmt.Printf("%T\n", str1)
//查找子串是否在指定的字符串中
fmt.Println(strings.Contains("golangtojava", "java"))
//查找子串在指定的字符串中的出现次数
fmt.Println(strings.Count("golangtojava", "a"))
//字符串比较
//不区分大小
fmt.Println(strings.EqualFold("abc", "ABC"))
fmt.Println("ABC" == "Abc")
//返回子串在字符串第一次出现的索引值,如果没有返回-1
fmt.Println(strings.Index("abc", "b"))
//字符串的替换,n可以指定你希望替换几个,如果n=-1表示全部替换,替换两个n就是2
fmt.Println(strings.Replace("gogogogo", "o", "x", 2))
//指定字符分割字符串
str2 := strings.Split("go-c-java", "-")
fmt.Println(str2)
//字符串大小写转换
fmt.Println(strings.ToLower("AbawdiAWD"))
fmt.Println(strings.ToUpper("AbawdiAWD"))
//将字符串左右两边的空格去掉
fmt.Println(strings.TrimSpace(" langlang "))
//将字符串左右两边指定的字符去掉
fmt.Println(strings.Trim("1langlang1", "1"))
//将字符串左边指定的字符去掉
fmt.Println(strings.TrimLeft("1langlang1", "1"))
//将字符串右边指定的字符去掉
fmt.Println(strings.TrimRight("1langlang1", "1"))
//判断字符串是否以指定的字符串开头
fmt.Println(strings.HasPrefix("golanggood", "go"))
//判断字符串是否以指定的字符串结束
fmt.Println(strings.HasSuffix("golanggood", "go"))
}
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
//Now()返回值是一个结构体,类型是:time.Time
fmt.Printf("%v ~~~ 对应的类型为:%T\n", now, now)
//调用结构体中的方法
fmt.Println(now.Year())
fmt.Println(now.Month()) //这里输出的是February
fmt.Println(int(now.Month())) //这里输出的是12
fmt.Println(now.Day())
fmt.Println(now.Hour())
fmt.Println(now.Minute())
fmt.Println(now.Second())
//1.将日期以年月日时分秒按照格式输出为字符串:
//Printf将字符串直接输出
fmt.Printf("当前年月日: %d-%d-%d 时分秒:%d:%d:%d \n", now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second())
//Sprintf可以得到这个字符串,以便后续使用
str1 := fmt.Sprintf("当前年月日: %d-%d-%d 时分秒:%d:%d:%d \n", now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second())
fmt.Println(str1)
//2.按照指定格式
//这个参数字符串的各个数字必须是固定的,必须这样写
datestr2 := now.Format("2006/01/02 15/04/05")
fmt.Println(datestr2)
//选择任意的组合都是可以的,根据需求自己选择就可以(自己任意组合)。
datestr3 := now.Format("2006 15:04")
fmt.Println(datestr3)
}
package main
import "fmt"
func main() {
//统计字符串的长度,按字节进行统计
str := "hello 你好啊"
fmt.Printf("这个%s的长度是%d\n", str, len(str))
//分配内存,主要用来分配值类型(int系列, float系列, bool, string、数组和结构体struct)
test := new(int)
fmt.Printf("类型是%T,地址是%v,值是%v", test, &test, *test)
//make函数:分配内存,主要用来分配引用类型(指针、slice切片、map、管道chan、interface 等)
//先略过
}
package main
import "fmt"
func test1() {
//利用defer+recover来捕获错误,defer后面需要加匿名函数的调用
defer func() {
//调用内置函数recover,可以捕获错误
err := recover()
//如果没有捕获错误,返回值为nil
if err != nil {
fmt.Println("错误被成功捕获")
fmt.Println("错误值为:", err)
}
}()
num1, num2 := 10, 0
num3 := num1 / num2
//因为除数为0,会报错。发现:程序中出现错误/恐慌以后,程序被中断,无法继续执行。
//panic: runtime error: integer divide by zero
fmt.Println(num3)
}
func main() {
test1()
fmt.Println("这里已经开始第一步了")
fmt.Println("这里已经开始第二步了")
}
package main
import (
"errors"
"fmt"
)
func test2() (err error) {
num1, num2 := 10, 0
if num2 == 0 {
//抛出自定义错误
//自定义错误:需要调用errors包下的New函数:函数返回error类型
return errors.New("除数不能为零哦!")
} else {
num3 := num1 / num2
fmt.Println(num3)
//如果没有捕获错误,返回值为nil
return nil
}
}
func main() {
err := test2()
if err != nil {
//虽然报错,但是程序还会继续执行哦!
fmt.Println("自定义错误:", err)
//有一种情况:程序出现错误以后,后续代码就没有必要执行,想让程序中断,退出程序:
//借助:builtin包下内置函数:panic
//报错后,后面的步骤不会执行
panic(err)
}
fmt.Println("这里已经开始第一步了")
fmt.Println("这里已经开始第二步了")
}