• GO 基础(一)


    Go语言基础工程目录如下(采用LiteIDE):

    备注:需要提前设置GOPATH,即工作目录,bin、pkg、src为默认的GO工程目录结构。GOPATH可以支持多个,在windows下配置在环境变量里,以;分割。

    go install com.fredriclib 命令编译库

    go install com.fredricmain 命令编译出执行文件main.exe

    实际项目中运用了GO语言,抽时间夯实基础,在lib中实现了一些测试函数,如下:

    1、集合相关

    package lib
    
    import (
        "fmt"
    )
    
    //测试数组
    func ArrayTest() {
        var array = []uint8{1, 2, 3}
        var i int = 0
    
        for i = 0; i < len(array); i++ {
            fmt.Printf("array %d Element:%d
    ", i, array[i])
        }
    }
    
    //测试结构体
    type User struct {
        UserName string
        PassWord string
    }
    
    func StructTest() {
        var user1 User
        user1.UserName = "Fredric"
        user1.PassWord = "Sinny"
    
        fmt.Printf("UserName: %s And Password %s
    ", user1.UserName, user1.PassWord)
    
        //结构体指针
        var pUser1 *User
        pUser1 = &user1
        fmt.Printf("UserName: %s And Password %s
    ", pUser1.UserName, pUser1.PassWord)
    }
    
    //测试切片
    func SliceTest() {
        //切片可以理解为可变数组
        var slice1 []uint8 = make([]uint8, 5, 10)
        //5为初始长度、10为容量,容量是可选参数,初始值为0
        fmt.Printf("slice1:%v Len:%d Cap:%d
    ", slice1, len(slice1), cap(slice1))
    
        //此时LEN和CAP都为6
        slice1 = []uint8{1, 2, 3, 4, 5, 6}
        fmt.Printf("slice1:%v Len:%d Cap:%d
    ", slice1, len(slice1), cap(slice1))
    
        //切片可以超出容量
        var array = []uint8{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
        slice1 = array
        fmt.Printf("slice1:%v
    ", slice1)
        //打印结果为3,4,5
        fmt.Printf("slice1 2:5 %v", slice1[2:5])
        array[0] = 11
        //数组的值修改后,切片的值也对应修改,此时slice1[0] = 11
        //因此slice是一个指针,指向那段数据内存
        fmt.Printf("slice1:%v [0]:%d
    ", slice1, slice1[0])
    
        //此时slice1尾部增加0,0两个元素,len = 13 CAP = 32
        //注意:为什么此处CAP比len大那么多,因为在Slice上追加元素的时候,首先会放到这块空闲的内存中,
        //如果添加的参数个数超过了容量值,内存管理器会重新划分一块容量值为原容量值*2大小的内存空间
        slice1 = append(slice1, 0, 0)
        fmt.Printf("slice1:%v Len:%d Cap:%d
    ", slice1, len(slice1), cap(slice1))
    
        newSlice := make([]uint8, len(slice1), cap(slice1))
        copy(newSlice, slice1)
        fmt.Printf("newSlice:%v Len:%d Cap:%d
    ", newSlice, len(newSlice), cap(newSlice))
    }
    
    //测试MAp
    func MapTest() {
        var myMap map[uint8]string
    
        myMap = make(map[uint8]string)
        myMap[0] = "fredric"
        myMap[1] = "sinny"
    
        for item := range myMap {
            fmt.Printf("No[%d] Element Is %s
    ", item, myMap[item])
        }
    
        item, res := myMap[1]
        fmt.Printf("%s %t
    ", item, res)
    
        delete(myMap, 1)
        item, res = myMap[1]
        fmt.Printf("%s %t
    ", item, res)
    }

    2、函数相关

    package lib
    
    import (
        "fmt"
    )
    
    //多个参数多个返回值
    func test01(param1 string, param2 uint8) (string, bool) {
        fmt.Printf("Param1 = %s, Param2 = %d
    ", param1, param2)
        return "result", true
    }
    
    //测试函数特性
    func FuncTest() {
        //res1, res2 := test01("hello,world", 6)
        //fmt.Println(res1, res2)
    
        //打印输出24
        fmt.Println(Factorial(4))
    }
    
    //菲波那切数列的递归函数
    func Factorial(x int) (result int) {
        if x == 0 {
            result = 1
        } else {
            result = x * Factorial(x-1)
        }
        return
    }

    3、面向对象相关

    package lib
    
    import (
        "fmt"
    )
    
    //定义一个接口
    type Service interface {
        doService()
        getParam() string
        setParam(input string)
    }
    
    type ServiceImpl1 struct {
        param string
    }
    
    func (impl1 *ServiceImpl1) doService() {
        fmt.Println("ServiceImpl1", impl1.param)
    }
    
    func (impl1 *ServiceImpl1) getParam() string {
        return impl1.param
    }
    
    func (impl1 *ServiceImpl1) setParam(input string) {
        impl1.param = input
    }
    
    type ServiceImpl2 struct {
        param string
    }
    
    func (impl2 *ServiceImpl2) doService() {
        fmt.Println("ServiceImpl2", impl2.param)
    }
    
    func (impl2 *ServiceImpl2) getParam() string {
        return impl2.param
    }
    
    func (impl2 *ServiceImpl2) setParam(input string) {
        impl2.param = input
    }
    
    //测试利用接口的面向对象
    func OOTest() {
        var service Service
        service = new(ServiceImpl1)
        service.setParam("Fredric")
        //打印ServiceImpl1 Fredric
        service.doService()
    
        service = new(ServiceImpl2)
        service.setParam("Sinny")
        //打印ServiceImpl2 Sinny
        service.doService()
    }
  • 相关阅读:
    jwt 加密和解密demo
    Mysql行转列,列转行 WITH ROLLUP 统计
    SIS的联锁和DCS的联锁动作的区别
    北斗校时服务器(GPS校时系统)设备技术应用方案
    网络智能开关(远程电源控制器)概述
    SAP QM启用了Physical Sample Management后检验批有哪些特殊地方?
    SAP QM初阶之启用了Multiple Specification功能后检验批的不同之处?
    SAP WM初阶根据Group Number来查询与之有关的TO单
    SAP QM初阶事务代码QA11对检验批做UD时出现很多选择集?
    SAP WM LT42创建TO,报错No entry in Table 329S (NM1 B)之对策
  • 原文地址:https://www.cnblogs.com/Fredric-2013/p/5970254.html
Copyright © 2020-2023  润新知