第 10 节:复合类型 小练习!

练习

1. 数组作为函数参数

package main

import "fmt"

func swap(a int, b int) {
    a, b = b, a
}

func main0101() {
    a := 10
    b := 20
    //值传递  形参不能改变实参的值  形参和实参是不同的地址单元
    swap(a, b)

    fmt.Println(a)
    fmt.Println(b)
}

//数组作为函数参数  返回值
func BubbleSort(arr [10]int)  [10]int {

    //fmt.Println(arr)
    //fmt.Println(len(arr))

    //arr[0]=123
    //arr[1]=234

    for i := 0; i < len(arr)-1; i++ {
        for j := 0; j < len(arr)-1-i; j++ {
            if arr[j] > arr[j+1] {
                arr[j], arr[j+1] = arr[j+1], arr[j]
            }
        }
    }

    return arr
    //fmt.Println(arr)

}
func main() {
    arr := [10]int{9, 1, 5, 6, 8, 4, 7, 10, 3, 2}
    //数组作为函数参数是值传递
    //形参和实参是不同的存储单元
    // 内存中有两份独立的数组存储不同的数据
    // 在函数调用结束形参单元销毁 不会影响主调函数中实参的值

    //如果想通过函数计算结果并传递给实参 需要使用数组作为函数的返回值
    arr = BubbleSort(arr)

    fmt.Println(arr)

}

2. 切片作为函数参数

package main

import "fmt"

//切片名作为函数参数 返回值
func test(s []int) []int{
    //fmt.Println(s)
    //fmt.Println(len(s))
    //s[0]=123
    //s[5]=666
    //fmt.Printf("%p\n", s)

    //for i := 0; i < len(s)-1; i++ {
    //  for j := 0; j < len(s)-1-i; j++ {
    //      if s[j] > s[j+1] {
    //          s[j], s[j+1] = s[j+1], s[j]
    //      }
    //  }
    //}

    //如果是函数中使用append进行数据添加时 形参的地址改变就不会在指向实参的地址

    s = append(s, 11, 12, 13, 14, 15)
    fmt.Printf("%p\n",s)
    fmt.Println(s)
    return s
}
func main() {
    //切片名本身就是一个地址
    slice := []int{9, 1, 5, 6, 8, 4, 7, 10, 3, 2}
    fmt.Printf("%p\n", slice)
    //地址传递  形参可以改变实参
    slice=test(slice)

    fmt.Println(slice)
}

3. 字符串处理函数

package main

import (
    "strings"
    "fmt"
)

func main0301() {
    //查找一个字符串在另外一个字符串中是否出现
    str1:="hello world"
    str2:="llo"
    //Contains(被查找字符串,查找字符串)
    //一般用作于模糊查找
    b:=strings.Contains(str1,str2)
    if b{
        fmt.Println("找到了")
    }else{
        fmt.Println("未找到")
    }
}

func main0302(){
    //字符串切片
    slice:=[]string{"1234","4637","2907","2308"}
    //字符串连接
    str:=strings.Join(slice,",")
    fmt.Println(str)

}

func main0303(){

    str1:="hello worllod"

    str2:="llo"

    //查找一个字符串在另外一个字符串中第一次出现的位置 返回值为int类型是下标
    i:=strings.Index(str1,str2)

    fmt.Println(i)
}
func main0304(){
    str:="性感法师在线讲课"
    //将一个字符串重复n次
    str1:=strings.Repeat(str,3)
    fmt.Println(str1)
}

func main0305(){

    str:="性感法师在线性感讲课"
    //字符串替换  用作于屏蔽敏感词汇
    //如果替换次数小于0 表示全部替换
    str1:=strings.Replace(str,"性感","**",-1)
    fmt.Println(str1)

}

func main0306(){
    //str1:="1300-199-1433"//13001991433
    str1:="123456@qq.com"
    //将字符串按照标志位进行切割变成切片
    slice:=strings.Split(str1,"@")

    //str2:=strings.Join(slice,"")

    fmt.Println(slice[0])
    //fmt.Println(str2)
}

func main0307(){

    str:="=====a=u=ok========"
    //去掉字符串头尾内容
    str1:=strings.Trim(str,"=")

    fmt.Printf("%s",str1)
}

func main0308(){

    str:="    are you ok     "

    //去掉字符串中的空格转成切片  一般用于做统计单词个数
    slice:=strings.Fields(str)

    //fmt.Println(slice)
    //for _,v:=range slice{
    //  fmt.Printf("=%s=\n",v)
    //}
    fmt.Println(len(slice))
}

func main(){
    //查找
    //bool类型=strings.Contains(被查找字符串,查找字符串)
    //int类型=strings.Index(被查找字符串,查找字符串)

    //分割组合
    //string类型=strings.Join(字符串切片,标志)
    //[]string类型=strings.Split(切割字符串,标志)

    //重复和替换
    //string类型=strings.Repeat(字符串,次数)
    //string类型=strings.Replace(字符串,被替换字符串,替换字符串,次数)

    //去掉内容
    //string类型=strings.Trim(字符串,去掉字符串)
    //[]string类型=strings.Fields(字符串)
}

4. 字符串类型转换

package main

import (
    "fmt"
    "strconv"
)

func main0401() {

    str:="hello world"

    //将字符串转成字符切片  强制类型转换
    slice:=[]byte(str)

    //fmt.Println(slice)

    slice[4]='a'
    for i:=0;i<len(slice);i++{
        fmt.Printf("%c",slice[i])
    }

}
func main0402(){
    //字符切片
    slice:=[]byte{'h','e','l','l','o',97}

    //fmt.Println(slice)

    fmt.Println(string(slice))
}
func main0403(){
    //将其他类型转成字符串  Format
    //b:=false
    //str:=strconv.FormatBool(b)
    //fmt.Println(str)

    //str:=strconv.FormatInt(123,10)//在计算机中进制可以表示2-36进制  2 8 10 16
    //fmt.Println(str)

    //str:=strconv.FormatFloat(3.14159,'f',4,64)
    //fmt.Println(str)

    str:=strconv.Itoa(123)
    fmt.Println(str)
}

func main0404(){
    //将字符串转成其他类型
    //b,err:=strconv.ParseBool("true")
    //if err != nil{
    //  fmt.Println("类型转化出错")
    //}else{
    //  fmt.Println(b)
    //}

    //value,_:=strconv.ParseInt("abc",16,64)
    //fmt.Println(value)

    //value,_:=strconv.ParseFloat("3.14159",64)
    //fmt.Println(value)

    //value,_:=strconv.Atoi("123")
    //
    //fmt.Println(value)
}

func main(){

    slice:=make([]byte,0,1024)
    //将其他类型转成字符串添加到字符切片里面

    slice=strconv.AppendBool(slice,false)
    slice=strconv.AppendInt(slice,123,2)

    slice=strconv.AppendFloat(slice,3.14159,'f',4,64)
    slice=strconv.AppendQuote(slice,"hello")

    fmt.Println(string(slice))
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
嗨,我是波波。曾经创业,有收获也有损失。我积累了丰富教学与编程经验,期待和你互动和进步! 公众号:上海PHP自学中心 付费知识星球:破解面试:程序员的求职导师
讨论数量: 2

厉害了,大佬

file

4年前 评论
wangchunbo

@lovecn 是我golang老师讲的好。

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
司机 @ 欣昊玉
文章
273
粉丝
339
喜欢
558
收藏
1106
排名:64
访问:12.2 万
私信
所有博文
社区赞助商