GO语言基础学习笔记(二)

 基本数据类型

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())
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值