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

傻梦兽 · · 1014 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

本文属于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的技术特性和差异

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1014 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传