11

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

 4 years ago
source link: https://studygolang.com/articles/25392
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本文属于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)
}

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK