美文网首页
技术栈:golang的技术特性和差异

技术栈:golang的技术特性和差异

作者: 茶艺瑶 | 来源:发表于2019-12-16 11:55 被阅读0次

    本文属于Golang学习之旅的一部分,更多文章可到Golang中可见。

    本文只要讲讲Golang和其他语言的,差异性,让你可以在其他中,可以快速切换到Golang中。
    Golang吸收了大量语言的特性,有pythone的简单开发,也解决了很多问题,至于为什么选择使用Golang,只要的PHP的局限性太大,JAVA太重。Pythone做数据分析,自己的能力不行。
    Docker是K8s,K3s都是又golang编写的,搞不好以后可以往架构的方面发展。

    我们先看一下的代码

    package main //包,表明代码所在的模块
    
    import (
        "fmt"
        "os"
    ) //引入代码依赖包
    
    //功能实现
    func main() {
        if len(os.Args) > 0 {
            fmt.Println("Hello World",os.Args[0])
        }
        os.Exit(-1)
    }
    

    可以见的Golang的一个基本组成结构。
    需要一个packageimport和其他语言没有多大区别,还需要一个主运用程序函数func main

    我们只需要注意
    1.必须是main包:package main
    2.必须是main方法:func main()
    3.文件名不一定是main.go 很多教程都这么写导致很多人以为这个是必要的入口文件

    退出返回值
    与其他主要的编程语言的差异
    Go中mian函数不支持任何返回值
    通过os.Exit来返回状态

    获取命令行参数
    与其他主要的编程语言的差异
    mian 函数不支持传入参数 比如func main(arg [] string)
    在程序中直接通过os.Args获取命令行参数

    由于为了方便一些代码都用Test的方式来实现。
    编写测试程序
    1.源码文件以_test结尾:xxx_test.go
    2.测试方法名以Test开头:func TestXXX(t *testing.T) {...}

    路径为 src/ch2/fib

    package fib
    
    import (
        "testing"
    )
    
    func TestFibList(t *testing.T) {
        var (
            a int = 1
            b int = 1
        )
        t.Log(a)
        for i := 0; i < 5; i++ {
            t.Log(" ", b)
            tmp := a
            a = b
            b = a + tmp
        }
    }
    
    func TestExchange(t *testing.T) {
        a := 1
        b := 2
        a, b = b, a
        t.Log(a, b)
    }
    

    这里注意的是
    = 是赋值, := 是声明变量并赋值。

    // = 使用必须使用先var声明例如:
    var a
    a=100
    //或
    var b = 100
    //或
    var c int = 100
    
    // := 是声明并赋值,并且系统自动推断类型,不需要var关键字
    d := 100
    

    变量赋值
    与其他主要的编程语言
    赋值可以进行自动类型推断
    在一个赋值语句中可以对多个变量进行同时赋值

    常亮定义
    与其他主要的编程语言
    快速设置连续值
    const (
    Monday = iota + 1
    Tuesday
    Wednesday
    )

    const (
    Open = 1 << iota
    Close
    Pending
    )

    数据类型有如下

    bool
    string
    int int8 int16 int32 int64
    uint uint8 uint16 uint32 uint64 uintptr
    byte
    run3
    float32 float64
    complex64 complex128

    Golang的类型转换

    package type_test
    
    import "testing"
    
    type MyInt int64
    
    func TestImplicit(t *testing.T) {
        var a int32 = 1
        var b int64
        b = int64(a)
        var c MyInt
        c = MyInt(b) //go比较严格别名也是不支持
        t.Log(a, b, c)
    }
    
    /*
    指针类型
    
    不支持指针运算
    string时值类型,其默认的初始化值为空字符串,而不是 nil
    */
    
    func TestPoint(t *testing.T) {
        a := 1
        aPtr := &a
        t.Log(a, aPtr)
    }
    
    

    相关文章

      网友评论

          本文标题:技术栈:golang的技术特性和差异

          本文链接:https://www.haomeiwen.com/subject/xubrnctx.html