技术栈: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的一个基本组成结构。
需要一个 package
, import
和其他语言没有多大区别,还需要一个主运用程序函数 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) }