2020-12-18-GO-Day5-字典,字符串

字典和字符串用起来和Python很类似。但是GO多了字符串和其他类型的转换。在转换过程中如果失败,用err进行定义。因此有时候转换的时候,输入是有2个参数的。

package main
import (
    "fmt"
    "strconv"      //字符串类型转换时导入
    "strings"      //字符串的string操作时导入
    "unicode/utf8" //包含中文的切片操作时导入
)

func main(){

    //字典:

    var m1 map[string]int
    m1 = make(map[string]int)
    m1["a"] = 1
    m1["b"] = 2
    m1["c"] = 3
    fmt.Println(m1)

    m2 :=make (map[string]interface{},10)
    m2["a"] = 1
    m2["b"] = "love"
    m2["c"] = 3
    fmt.Println(m2)
    fmt.Println(len(m2))
    //输出相应key的value
    fmt.Println(m2["b"])

    //使用循环遍历字典
    for key,value := range m2 {
        fmt.Println("key is", key, ";" ,"value is", value)
    }
    //遍历的结果虽然一样,但是顺序不一样。这点和Python相同
    //字典是无序的,因此不能用切片,不能用角标索引。
    //且满足Key:Value的关系。一般是不定长,若不知道value的类型,可以使用interface{},不指定类型

    //字符串
    //可哈希,意味着字符串一旦定义,不能被改变。只能通过字节切片[]byte或者[]rune的方式进行修改

    //byte 等同于int8,常用来处理ascii字符
    //rune 等同于int32,常用来处理unicode或utf-8字符

    //''的类型是rune
    //""的类型是string

    s := "Hello"
    b :=[]byte(s)
    b[0]='h'
    //使用"",则会报错cannot use "h" (type untyped string) as type byte in assignment
    b[1]='E'
    s = string(b)
    fmt.Println(s)
    fmt.Println(len(s))
    fmt.Println((s[0])) //输出为104,ASCII码对应的是h

    ss := "Hello我哎"
    bb :=[]rune(ss)
    fmt.Println(bb) //[72 101 108 108 111 25105 21710]
    bb[0]='h'
    //使用"",则会报错cannot use "h" (type untyped string) as type byte in assignment
    bb[1]='E'
    ss = string(bb)
    fmt.Println(ss)
    fmt.Println(len([]rune(ss))) //7
    fmt.Println((ss[0])) //输出为104,ASCII码对应的是h

    //包含有中文的切片操作。
    //使用rune。中文一般对应2个字符长度。
    str :="Go来吧"
    fmt.Println(len(str)) //8
    fmt.Println(utf8.RuneCountInString(str)) //将字符串转换成rune //4
    runeint32 := []rune(str)
    for i := range runeint32{
        fmt.Printf("%c\n",runeint32[i])
    }
    //输出有乱码,原因就是使用了byte 8位输出
    bi := []byte(str)
    for i := range bi{
        fmt.Printf("%c\n",bi[i]) //Go��
    }

    //字符串操作:
    //和Python类似,有contains ,HasPrefix,HasSuffix,Replace, Split
    //ToLower, ToUpper, Repeat, Count, Index,Join
    // https://blog.csdn.net/nyist_zxp/article/details/109154160
    sen := "TodaY is is is Friday"
    //contains
    fmt.Println(strings.Contains(sen,"day")) //true
    //HasPrefix
    fmt.Println(strings.HasPrefix(sen,"F")) //false
    //HasSuffix
    fmt.Println(strings.HasSuffix(sen,"y")) //true
    //Replace
    fmt.Println(strings.Replace(sen,"is","IS VERY",2)) //TodaY IS VERY IS VERY is Friday
    //Split
    fmt.Println(strings.Split(sen,"")) //[T o d a Y   i s   i s   i s   F r i d a y]
    //ToLower变小写,ToUpper变大写
    fmt.Println(strings.ToLower(sen)) //today is is is friday
    fmt.Println(strings.ToUpper(sen)) //TODAY IS IS IS FRIDAY
    //Repeat,输入0和-1时报错
    fmt.Println(strings.Repeat(sen,2))
    //Count
    fmt.Println(strings.Count(sen,"a")) //2
    fmt.Println(strings.Count(sen,"")) //22 返回sen+1 的个数
    //Index
    fmt.Println(strings.Index(sen,"i"))//6
    //Join
    sen2 :=[]string{"I","Love","you"}
    fmt.Println(strings.Join(sen2,"-")) //I-Love-you
    fmt.Println(strings.Join(sen2," ")) //I Love you

    //字符串类型的转换:strcov

    //https://www.cnblogs.com/saryli/p/13279643.html

    //字符串转int:Atoi()
    //int转字符串: Itoa()
    //ParseTP类函数将string转换为TP类型:ParseBool()、ParseFloat()、ParseInt()、ParseUint()。因为string转其它类型可能会失败,所以这些函数都有第二个返回值表示是否转换成功
    //FormatTP类函数将其它类型转string:FormatBool()、FormatFloat()、FormatInt()、FormatUint()
    //AppendTP类函数用于将TP转换成字符串后append到一个slice中:AppendBool()、AppendFloat()、AppendInt()、AppendUint()

    //1.int转换为字符串:Itoa()
    fmt.Println("a"+strconv.Itoa(666)) //a666
    //2.string转换为int:Atoi()
    //由于string可能无法转换为int,所以这个函数有两个返回值:第一个返回值是转换成int的值,第二个返回值判断是否转换成功
    i,err := strconv.Atoi("a")
    if err != nil {
        fmt.Printf("convert failed")
    }
    fmt.Println(i)

    //Parse类函数用于转换字符串为给定类型的值:ParseBool()、ParseFloat()、ParseInt()、ParseUint()。
    b2, err := strconv.ParseBool("love")
    f2, err := strconv.ParseFloat("3.1415", 64)
    i2, err := strconv.ParseInt("-42", 10, 64)
    u2, err := strconv.ParseUint("42", 10, 64)
    fmt.Println(b2,f2,i2,u2) //false 3.1415 -42 42
    //bitSize参数表示转换为什么位的int/uint,有效值为0、8、16、32、64。当bitSize=0的时候,表示转换为int或uint类型。
    //例如bitSize=8表示转换后的值的类型为int8或uint8
    //base参数表示以什么进制的方式去解析给定的字符串,有效值为0、2-36。当base=0的时候,表示根据string的前缀来判断以什么进制去解析:
    //0x开头的以16进制的方式去解析,0开头的以8进制方式去解析,其它的以10进制方式解析。

    //将给定类型格式化为string类型:
    //FormatBool()、FormatFloat()、FormatInt()、FormatUint()
    b3 := strconv.FormatBool(true)
    c3 := strconv.FormatFloat(3.1415, 'E', -1, 64)
    d3 := strconv.FormatInt(-42, 10)
    e3 := strconv.FormatUint(42, 10)
    fmt.Println(b3,c3,d3,e3) //true 3.1415E+00 -42 42
    //prec控制精度(排除指数部分):对'f'、'e'、'E',它表示小数点后的数字个数;对'g'、'G',它控制总的数字个数。
    //如果prec 为-1,则代表使用最少数量的、但又必需的数字来表示f。

}

输出结果

map[a:1 b:2 c:3]
map[a:1 b:love c:3]
3
love
key is a ; value is 1
key is b ; value is love
key is c ; value is 3
hEllo
5
104
[72 101 108 108 111 25105 21710]
hEllo我哎
7
104
8
4
G
o
来
吧
G
o
æ
�
¥
å
�
§
true
false
true
TodaY IS VERY IS VERY is Friday
[T o d a Y   i s   i s   i s   F r i d a y]
today is is is friday
TODAY IS IS IS FRIDAY
TodaY is is is FridayTodaY is is is Friday
2
22
6
I-Love-you
I Love you
a666
convert failed0
false 3.1415 -42 42
true 3.1415E+00 -42 42

你可能感兴趣的:(2020-12-18-GO-Day5-字典,字符串)