基本数据类型
package day4
import (
"fmt"
)
func D41() {
var a int = 2
fmt.Printf("整数a =%d\n", a)
var f float32 = 1.
fmt.Printf("浮点型32 f = %.2f\n", f)
fmt.Println("this is D41 function")
// 使用反引号内容回原样复制和输出
var str = "hello go"
fmt.Println(str)
// 反引号会取消转义字符生效 类比python 的r
fmt.Println(`\t hell go`)
fmt.Println(`\t hello
go`)
// 字符串是字节的定长数组,byte 和 rune 都是字符类型,若多个字符放在一起,就组成了字符串
// 比如 hello ,对照 ascii 编码表,每个字母对应的编号是:104,101,108,108,111
var mystr01 string = "hello"
var mystr02 [5]byte = [5]byte{104, 101, 108, 108, 111}
fmt.Printf("str01 : %s\n", mystr01)
fmt.Printf("str02: %s \n", mystr02)
// hello,码神之路 占用几个字节
var mystr03 string = "hello,码神之路"
fmt.Printf("str length : %d\n", len(mystr03))
}
整数a =2
浮点型32 f = 1.00
this is D41 function
hello go
\t hell go
\t hello
go
str01 : hello
str02: hello
str length : 20
字符串类型
package day4
import (
"fmt"
"unicode/utf8"
)
func D42() {
fmt.Println("D42 function")
// ASCII字符使用len()函数
// Unicode字符串长度使用utf8.RuneCountInString()函数
// 计算字符串的长度
str1 := "hello"
str2 := "你好"
fmt.Println(len(str1))
fmt.Println(len(str2))
fmt.Println(utf8.RuneCountInString(str2))
}
package day5
import (
"bytes"
"fmt"
)
func D51() {
fmt.Print()
str1 := "你好"
str2 := "go"
var stringBuilder bytes.Buffer
// 节省内存分配, 提高处理效率
stringBuilder.WriteString(str1)
stringBuilder.WriteString(str2)
fmt.Println(stringBuilder.String())
// 获取字符串的单个字符
// 直接索引对rune类型无效,可以使用string方法转换
var myStr string = "hello,大程"
fmt.Println("获取字符串中的中文字符:" + string([]rune(myStr)[6]))
// 遍历
// unicode字符集使用for range进行遍历,ascii字符集可以使用for range或者for循环遍历
for i := 0; i < len(myStr); i++ {
fmt.Printf("ascii %c %d\t", myStr[i], myStr[i])
}
fmt.Println()
for _, s := range myStr {
fmt.Printf("unicode %c %d", s, s)
}
fmt.Println()
// 中文只能使用for range
myStr2 := "你好,大程"
for _, s := range myStr2 {
fmt.Printf("unicode : %c %d\n", s, s)
}
// 字符串的格式化输出
result := fmt.Sprint(stringBuilder.String())
fmt.Println(result)
// %c 单一字符
// %T 动`态类型
// %v 本来值的输出
// %+v 字段名+值打印
// %d 十进制打印数字
// %p 指针,十六进制
// %f 浮点数
// %b 二进制
// %s string
}
字符串查找(匹配)
// 如何获取字符串中的某一段字符?
// strings.Index(): 正向搜索子字符串
// strings.LastIndex():反向搜索子字符串
package day5
import (
"fmt"
"strings"
)
func D52() {
fmt.Print()
// 字符串查找
// 如何获取字符串中的某一段字符?
// strings.Index(): 正向搜索子字符串
// strings.LastIndex():反向搜索子字符串
tracer := "你好,大程没睡醒,别叫"
// 正向搜索字符串
index := strings.Index(tracer, ",")
fmt.Println(",所在的位置", index) // ,所在的位置 6
fmt.Println(tracer[index:]) //,大程没睡醒,别叫
lst_index := strings.LastIndex(tracer, "大程") //
fmt.Println("大程再:", lst_index) // 大程再: 7
fmt.Println(tracer[:lst_index]) // 你好,
}
package day5
import (
"fmt"
)
func D53() {
fmt.Print()
// 类型转换
// 所有的类型转换都必须显式的声明,小变大,大变小会发生精度丢失
// 底层同类型
a := 50.
b := int(a)
fmt.Printf("a: %.2f \t b: %d \t\n", a, b)
// 修改字符串
// 将字符串转换为[]byte进行修改
// []byte和string可以通过强制类型转换
str := "local:8080"
// 强制类型转换 string - byte
stringBytes := []byte(str)
// 下标修改
stringBytes[len(str)-1] = '7'
fmt.Println(stringBytes)
for _, i := range stringBytes {
fmt.Printf("%c", i)
}
fmt.Println()
// 强制类型转换 []byte to string
str2 := string(stringBytes)
fmt.Println(str2)
}
字符串替换, 比如将 "Hello, 码神之路Java教程" 替换为 "Hello, 码神之路Go教程"
package day5
import (
"bytes"
"fmt"
"strings"
)
func D54() {
str := "hello,麻神之路java教程"
index := strings.Index(str, "java")
// for i:=index-1; i<len(str);i++{
// strBytes[i] :=
// }、
// 利用索引的方式,掐头去尾
tmplenth := len("java")
start := str[:index]
end := str[index+tmplenth:]
mid := "go"
var stringBuilder bytes.Buffer
stringBuilder.WriteString(start)
stringBuilder.WriteString(mid)
stringBuilder.WriteString(end)
// 需要转换成string 输出
fmt.Println(stringBuilder.String())
}