Go作为新兴语言,很容易上手,天生支持并发,为多核CPU而生;接近C的执行效率;静态语言;支持垃圾回收。
一. 安装
下载go并设置环境变量
set GOROOT=D:\go #sdk目录
set GOPATH=D:\gowork #工作目录
set PATH=%GOROOT%\bin;%PATH%
二. Hello world
package main // 包名 import "fmt" // 导入Println函数,java/python也是用import关键字 func main() { // { 必须与() 在同一行,否则会编译出错 fmt.Println("hello world") // 与java类似的println() fmt.Println(os.Args) // 与C不同的是,命令行参数储存在os.Args中 }
编译:
$ go build -o hello.exe hello.go #编译产生可执行文件
$ go run hello.go #该命令会进行编译,链接,运行,没有产生中间文件和可执行文件,直接显示结果
注:Linux下go程序用静态方式链接,无.DYNAMIC段。
三. 开发工具
IDE工具:eclipse安装goclipse插件,LiteIDE,gogland等。
四. 基础语法
4.1 基础
package main // 包名 import ( "fmt" "sub" // 导入变量,需设置$GOPATH指定工程 ) // 变量定义 var a int a = 100 // 变量赋值 b := 100 // := 操作符自动推导类型,声明并给变量赋值 // 指针 var p *int // 变量声明,类型后置 var a int = 20 p = &a // 取址,与C语言一致 fmt.Printf("addr:%#04x\n", p) var brr [5]int // 变量定义不使用会报错:brr declared and not used var arr = [5]int{1, 2, 3, 4, 5} // 数组 newarr := arr[:] // [:]切片,引用arr数组 // 遍历数组 for i:=0; i<5; i++ { fmt.Printf("val:%d -- %d\n", i, arr[i]); } // 调用模块方法 sub.Substract(10, 20) // 方法名大写作用域为public,小写为private无法外部调用 // 使用关键字go便能启动线程 go hello() // 匿名函数 b := func(x int,y int)(int,int) { return x+1,y+2 } b(2, 3) // 打印3,5
4.2 结构体与反射
a. 结构体指针
// 定义结构体,go中无class关键字 type Person1 struct { Age int Name string } // 定义结构体指针 p := new(Person1) p.Age = 20 // .操作,非c -> p.Name = "kettas" fmt.Printf("Person struct: %v\n", *p) // 输出:Person struct: {20 kettas}
b. 结构体标签
结构体字段可添加标签,方便序列化显示。
import "encoding/json" type Person2 struct { Age int `bson:"_id" json:"age"` Name string `bson:"_name" json:"name"` } // 结构体标签 var p1 Person1 = Person1{18, "kettas"} var p2 Person2 = Person2{20, "sun"} b, _ := json.Marshal(p1); fmt.Println("Person1: ", string(b)); // 输出:Person1: {"Age":18,"Name":"kettas"} b, _ = json.Marshal(p2); fmt.Println("Person2: ", string(b)); // 输出:Person2: {"age":20,"name":"sun"}
添加标签的字段编码会将字段转化成小写。struct 属性首字母大写解决外部调用的问题,标签解决与外部通过json交换数据时序列化问题。
c. 反射
go很容易实现反射
import "reflect" // 反射测试 t := reflect.TypeOf(p2) fmt.Printf("Type:%s Kind:%s\n", t.Name(), t.Kind()) // 遍历结构体属性 for i:=0; i<t.NumField(); i++ { field := t.Field(i) tag := field.Tag.Get("json") fmt.Printf("%d %v(%v) tag:%v\n", i+1, field.Name,field.Type.Name(), tag) }
// 输出
Type:Person2 Kind:struct
1 Age(int) tag:age
2 Name(string) tag:name
4.3 接口
/// http 服务器 // 定义接口 type Phone interface { call() int } // 为了实现接口,需先定义一个struct type Hello struct { } // Hello成员方法ServerHTTP,实现http的 ServeHTTP()接口 func (h Hello) ServeHTTP(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "Hello!") } func httpServ() { var h Hello http.ListenAndServe("localhost:4000", h) }
4.3 管道
// 数组求和 func sum(a []int, c chan int) { sum := 0 for _, v := range a { sum += v } // 计算结果发送到 channel c c <- sum } // 管道测试 func channeltest() { a := []int{1, 2, 7, 8, 10, 5} c := make(chan int) // 建立无缓冲管道c go sum(a[:len(a)/2],c) // go关键字启动goroutine,计算前半段10 go sum(a[len(a)/2:],c) // 计算后半段23 x,y := <-c,<-c // 堵塞接收管道c值,并赋值给x,y fmt.Println(x, y, x+y) // 输出: 23 10 33 }
4.4 foreach语法
// go for i,v := range a {} // 可省略i,k,用_代替 // java int a[] = {1,2,3,4}; for(int i : a){ } // c++11, QT的foreach宏 for(auto i : a){ } // python for i in a: print i
相关推荐
Python是时髦的机器学习御用开发语言,Golang是大红大紫的新时代后端开发语言。Python很适合让搞算法的写写模型,而Golang很适合提供API服务,两位同志都红的发紫,这里就介绍一下正确搅基的办法。 go 中的 cgo 模块...
golang中文手册.chm,学习golang语言的字典,一典在手,天下我有
国密加密解密 sm4 sm2 的java python golang实现,java和python,golang的有一定区别,需要修改点东西才可以实现。 SM4Key = ran_str = ''.join(random.sample(string.ascii_letters + string.digits, 16)) ...
本文主要给大家介绍了关于Golang实现字符串倒序的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 字符串倒置如下: Hello World –> dlroW olleH 解决方案1: length := len(str) ...
本文实例讲述了golang实现的文件上传与文件下载功能。分享给大家供大家参考,具体如下: upload.go 复制代码 代码如下:package common import ( “io/ioutil” “os” “path” “github.com/gin-gonic/gin...
golang开发modbus rtu实例,使用golang与Modbus Slave软件进行模拟测试。
比较全的golang在vscode里面的插件了,下载下来可以直接安装。 go install github.com/acroca/go-symbols go install golang.org/x/tools/cmd/guru go install github.com/cweill/gotests/... go install github...
golang中文手册.rar
在Centos7安装golang教程
golang 1.14.2 mips 龙芯版,用于龙芯系列处理器的专属预编译golang语言sdk开发包,因为golang官方默认不提供golang语言的龙芯处理器版本,大家都需要自己从头编译golang才能在龙芯机器里面用,这个是提前打包好的,...
golang解析数字证书 PKCS#1 PKCS#8格式的私钥
本文主要给大家介绍了关于Golang中switch和select用法的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 一、switch语句 switch语句提供了一个多分支条件执行的方法。每一个case可以携带一个表达式...
golang提取office文件内容,可以支持正常office文件内容格式,可以很好的提取标点以及内在格式内容
golang rtsp 转码到web 无插件播放
golang本身不自带ECB加密的方法,有人写了ECB加密的方法请求合并,但被go的开发团队拒绝了,原因貌似是当时谷歌的go团队急着推送golang1.1版本。 我贴上原代码内容,有需要的朋友把下面两个文件放到go的`src/pkg/...
golang函数查询手册.chm
golang使用bass.dll播放mp3文件
主要介绍了详解Golang利用反射reflect动态调用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
golang 中文离线文档,直接解压,运行pkgdoc.exe后,会跳出本地文档地址,默认127.0.0.1:9999
循环鼠标自动点击功能--- Golang实现 有代码和可执行程序。