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
相关推荐
Golang,作为一种现代且高效的编程语言,因其强大的系统级编程能力和并发特性而受到广泛欢迎。在本文中,我们将深入探讨如何利用Golang实现这个功能,并了解相关的核心知识点。 首先,我们需要了解的是Golang的图形...
在本文中,我们将深入探讨如何配置Golang环境以及如何使用Golang对接Amazon S3对象存储。首先,让我们从安装Golang环境开始。 1. **安装Go环境** - **Windows**:在Windows操作系统上,你可以从Go的官方网站下载...
golang语言,window系统下安装go语言包安装包 在 Windows 系统下安装 Go 语言包,可以按照以下步骤进行: 下载 Go 语言包 在官网 https://golang.org/dl/ 中下载适合你系统的Go语言包,选择 .msi 安装包下载即可。 ...
在Golang生态系统中,`golang.org/x`是一个非常重要的包集合,它包含了大量由Go官方维护和贡献的扩展库。这些包覆盖了各种功能,从网络编程到文本处理,为Go开发者提供了丰富的工具和解决方案。`golang.org/x`包系列...
Golang,由于其并发模型、内存管理以及高效的网络库,成为了构建此类系统的热门选择。本篇将深入探讨如何利用Golang实现一个高性能的IM单聊系统,特别关注UDP(用户数据报协议)在其中的作用和分发策略。 首先,...
Python是时髦的机器学习御用开发语言,Golang是大红大紫的新时代后端开发语言。Python很适合让搞算法的写写模型,而Golang很适合提供API服务,两位同志都红的发紫,这里就介绍一下正确搅基的办法。 go 中的 cgo 模块...
Golang程序(可能就是goRtsp.exe)作为一个中间层,它接收RTSP流,对视频流进行处理(例如,转码、切片),然后提供一个Web友好的格式,如HLS,使Web前端可以轻松地通过AJAX或Fetch API请求并播放这些流。...
`golang.org/x` 是 Go 语言生态系统中的一个特殊仓库,包含了由 Go 语言官方维护但并未包含在标准库中的各种模块和工具。这个仓库包含了众多实用的第三方组件,如网络编程库、数据库驱动、文本处理工具等。由于 `...
Go语言,又称Golang,是由Google开发的一种静态类型、编译型、并发型且具有垃圾回收功能的编程语言。它设计的目标是提高开发者的生产效率,同时保持系统级编程的性能。Go语言的设计受到了C、 Pascal、 Miranda和...
标题中的"Pycharm Golang插件 jar"指的是在PyCharm这款流行的Python集成开发环境中安装Golang编程语言的扩展插件。PyCharm是由JetBrains公司开发的一款强大的IDE,它支持多种编程语言,包括Python、Go等。由于Golang...
在Golang中,如果你想要实现音频播放功能,特别是在处理MP3文件时,可以利用外部库,比如BASS库。BASS是一个广泛使用的音频处理库,它提供了强大的音频播放、流处理和格式转换功能。在Golang中使用BASS库通常需要...
《Zinx:Golang构建MMO游戏服务器及客户端解析》 在现代网络游戏开发中,后端服务器扮演着至关重要的角色,它们负责处理玩家交互、游戏逻辑、数据存储等一系列任务。Zinx是一个用Golang编写的轻量级网络框架,特别...
【钉钉企业应用Demo(golang版)】是一个官方提供的示例项目,旨在帮助开发者了解如何使用Golang语言来构建钉钉企业微应用。这个Demo包含了完整的源代码,为二次开发提供了便利,使得开发者能够快速上手,理解并利用...
在本项目中,我们将探讨如何使用Golang(Go语言)来实现LoRa数据的发送与接收,并对收集到的数据进行处理。 首先,理解Golang的基础是必要的。Golang是一种静态类型、编译型、并发型、垃圾回收的编程语言,以其简洁...
Go语言,又称Golang,是由Google开发的一种静态类型的、编译型的、并发型的、垃圾回收的、C-like的编程语言。Go语言的设计目标是提高开发者的生产效率,同时保持程序运行的高效率和可移植性。在Windows平台上安装Go...
最近在学习Golang语言,中间遇到一个前辈指点,有一个学习原则:Learning By Doing。跟我之前学习Java的经验高度契合。在前一段时间学习洼坑中挣扎了好几天,差点就忘记这个重要的成功经验。 那么那什么来做练习呢...
在GOLANG中,解决这个问题需要对网络编程原理和GOLANG的网络库有深入理解。本文将详细介绍如何使用GOLANG来解决SOCKET通信中的粘包问题。 首先,理解粘包产生的原因。TCP协议是基于流的,没有明确的数据边界。它会...
国密加密解密 sm4 sm2 的java python golang实现,java和python,golang的有一定区别,需要修改点东西才可以实现。 SM4Key = ran_str = ''.join(random.sample(string.ascii_letters + string.digits, 16)) ...
在`pycharm2018.3之golang插件`这个主题中,我们将探讨如何在PyCharm 2018.3版本上安装和配置Golang插件,以便在这款强大的Python IDE中编写和调试Go代码。 首先,我们需要了解为什么在PyCharm 2018.3这个特定版本...