• Go基础(1)


    demo1:

    package add
    
    var Name string = "hello world"
    var Age int = 10
    package main
    
    import (
        "DEMO/test/day2/example2/add"
        "fmt"
    )
    
    func main() {
    
        fmt.Println("Name:", add.Name)
        fmt.Println("Age:", add.Age)
    
    }

    分析:

    1.调包,需要写GOPATH目录下src目录之后的路径

      比如我电脑的GOPATH:D:PROJECTGO_PROJECT

      我的add包目录:D:PROJECTGO_PROJECTsrcDEMO estday2example2add

    2.一个文件夹里面只能有一个包,最好同名

    3.main函数必须在main包中

    4.private变量小写首字母,public变量大写首字母即可

    demo2:

    package add
    
    var Name string = "test"
    var Age int = 666
    
    func init() {
        Name = "Hello World!"
        Age = 10
    }
    package main
    
    import (
        a "DEMO/test/day2/example3/add"
        "fmt"
    )
    
    func main() {
    
        fmt.Println("Name:", a.Name)
        fmt.Println("Age:", a.Age)
    
    }

    分析:

    1.导入的包可以取别名,比如我这里的a

    2.init函数在初始赋值后执行,所以这里应该输出的是helloworld和10

    demo3:

    package main
    
    import (
        "fmt"
    )
    
    func modify(a int) {
        a = 10
        return
    }
    
    func modity(a *int) {
        *a = 10
        return
    }
    
    func main() {
        a := 5
        b := make(chan int, 1)
        fmt.Println("a =", a)
        fmt.Println("b =", b)
        modify(a)
        fmt.Println("a =", a)
        modity(&a)
        fmt.Println("a =", a)
    }

    分析:

    1.依次输出:a = 5,b = 0xc0000160e0,a = 5,a = 10

    2.理解修改地址和修改引用的区别

    demo4:

    package main
    
    import "fmt"
    
    func swap(a *int, b *int) {
        temp := *a
        *a = *b
        *b = temp
        return
    }
    
    func go_swap(a int, b int) (int, int) {
        return b, a
    }
    
    func main() {
        three := 3
        four := 4
        swap(&three, &four)
        fmt.Println("---Swap---")
        fmt.Println("three =", three)
        fmt.Println("four =", four)
        three, four = go_swap(three, four)
        fmt.Println("---Swap---")
        fmt.Println("three =", three)
        fmt.Println("four =", four)
    }

    分析:

    1.两种交换都是正确的

    2.理解传统c语言交换函数以及多返回值形式的交换函数

    demo5:

    package main
    
    import (
        "fmt"
        "math/rand"
        "time"
    )
    
    func init() {
        rand.Seed(time.Now().UnixNano())
    }
    
    func main() {
        fmt.Println("---Generate Random Number---")
        fmt.Println("--Int---")
        for i := 0; i < 3; i++ {
            a := rand.Int()
            fmt.Println(a)
        }
        fmt.Println("---Int(100)---")
        for i := 0; i < 3; i++ {
            a := rand.Intn(100)
            fmt.Println(a)
        }
        fmt.Println("---Float32---")
        for i := 0; i < 3; i++ {
            a := rand.Float32()
            fmt.Println(a)
        }
    }

    分析:

    1.简单的随机数生产程序,学会rand和time的基本使用

    2.根据当前的精确时间给rand一个种子,保证随机的不确定性

    demo6:

    package main
    
    import "fmt"
    
    func reverse1(str string) string {
        var result string
        strLen := len(str)
        for i := 0; i < strLen; i++ {
            result += fmt.Sprintf("%c", str[strLen-i-1])
        }
        return result
    }
    
    func reverse2(str string) string {
        var result []byte
        tmp := []byte(str)
        lenth := len(str)
        for i := 0; i < lenth; i++ {
            result = append(result, tmp[lenth-i-1])
        }
        return string(result)
    }
    
    func main() {
        str := "hello world!"
        result := reverse2(str)
        fmt.Printf("str:%s
    result:%s
    ", str, result)
    }

    分析:

    1.反转字符串的两种形式

    demo7:

    package main
    
    import (
        "fmt"
        "math"
    )
    
    func main() {
        min := 1
        max := 100
        for i := min; i <= max; i++ {
            var flag bool = true
            if i == 1 {
                flag = false
            }
            for j := 2; j <= int(math.Sqrt(float64(i))); j++ {
                if i%j == 0 {
                    flag = false
                    break
                }
            }
            if flag {
                fmt.Printf("%d是素数
    ", i)
            }
        }
    }

    分析:

    1.求1-100的所有质数

    2.注意求指数过程优化,除数最大达到根号被除数即可

    demo8:

    package main
    
    import (
        "fmt"
        "strconv"
    )
    
    func main() {
        min := 1
        max := 1000
        for i := min; i <= max; i++ {
            if isNarcissisticNumber(i) {
                fmt.Printf("%d是水仙花数
    ", i)
            }
        }
    }
    
    func isNarcissisticNumber(n int) bool {
        tmp := strconv.Itoa(n)
        data := []byte(tmp)
        lenth := len(data)
        var result int = 0
        for i := 0; i < lenth; i++ {
            number, _ := strconv.Atoi(string(data[i]))
            result += number * number * number
        }
        if n == result {
            return true
        } else {
            return false
        }
    }

    分析:

    1.求水仙花数的一种实现

    2.这里的Atoi是多返回值函数,用不到的返回值用“_”代替即可

    3.这里是字符串处理的方式实现,还可以用除10的数学方式实现

    demo9:

    package main
    
    import "fmt"
    
    func main() {
        fmt.Println(factorial(5))
    }
    
    func factorial(n uint) uint {
        if n == 0 {
            return 1
        }
        if n == 1 {
            return n
        }
        return n * factorial(n-1)
    }

    分析:

    1.利用递归实现阶乘,是比较优秀的实现方式

  • 相关阅读:
    循环神经网络
    相似度计算(余弦距离/欧式距离)
    最常见Linux操作
    注意力机制总结
    随机打乱数组算法、蓄水池算法
    6.1 数据结构---树(遍历)
    Node.js调用C/C++
    linux中nmcli命令详解
    stylus入门使用方法
    webpack CommonsChunkPlugin详细教程
  • 原文地址:https://www.cnblogs.com/xuyiqing/p/10592764.html
Copyright © 2020-2023  润新知