GVKun编程网logo

转--Golang语言-- Web 编程(golang开发web)

18

最近很多小伙伴都在问转--Golang语言--Web编程和golang开发web这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展golang语言、Golang语言与C语言的比较学习

最近很多小伙伴都在问转--Golang语言-- Web 编程golang开发web这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展golang语言、Golang语言 与 C 语言 的比较学习、Golang语言 之网络、Golang语言 几个亟待解决的Go语言问题等相关知识,下面开始了哦!

本文目录一览:

转--Golang语言-- Web 编程(golang开发web)

转--Golang语言-- Web 编程(golang开发web)

总结

以上是小编为你收集整理的转--Golang语言-- Web 编程全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

golang语言

golang语言

最近,笔者开始使用golang语言。感觉golang是一门很有前途的语言。这不仅仅是因为golang是由大牛们打造出来的。更因为golang语言的特性。最近文章会开始介绍golang语言。

golang历史

2007年,谷歌工程师Rob Pike,Ken Thompson和Robert Griesemer开始设计一门全新的语言,这是Go语言的最初原型。

2009年11月10日,Go语言以开放源代码的方式向全球发布。

2011年3月16日,Go语言的第一个稳定(stable)版本r56发布。

2012年3月28日,Go语言的第一个正式版本Go1发布。

2013年4月04日,Go语言的第一个Go 1.1beta1测试版发布。

2013年4月08日,Go语言的第二个Go 1.1beta2测试版发布。

2013年5月02日,Go语言Go 1.1RC1版发布。

2013年5月07日,Go语言Go 1.1RC2版发布。

2013年5月09日,Go语言Go 1.1RC3版发布。

2013年5月13日,Go语言Go 1.1正式版发布。

2013年9月20日,Go语言Go 1.2RC1版发布。

设计者包括Robert Griesemer,Rob Pike和Ken Thompson,后来Ian Lance Taylor实现了基于GCC的go编译器gccgo,Russ Rox的加入推动了语言和库的实际可用性。

简介

Go语言是Google于2009年推出的静态编译型语言,旨在为开发人员提供类似Python,Ruby一样简洁的语言环境,同时又具备C/C++一样的运行效率。作为一个开源项目,在过去的两年多时间里,Go以社区协作的形式,不断地完善语言和标准库的设计与实现。2012年3月28日发布了第一个稳定的发行版本:Go version 1,简称Go1。

Go 1的推出,意味着Go语言和它的标准库已经进入了一个稳定阶段。对于谨慎的开发人员来说,开发Go程序正趁当下,现在已经可以放心地开发Go程序,不必再考虑未来语法和标准库的变化。

Go的基本设计理念是:编译效率,运行效率和开发效率要三者兼顾。使用Go开发,要让开发人员感觉到Python的便利,C/C++的运行效率,以及小到可以被忽略的编译时间。为了实现这个理念,形成了Go语言的以下几个特性:

  • 编译,静态类型语言。由此可以提供满足对运行效率敏感的系统级应用。

  • 垃圾回收,去除复杂的内存释放工作。

  • 简洁的符号和语法,极力减少开发人员输入的字符数。

  • 平坦的类型系统,去除了复杂的继承关系。使用结构化类型系统(Structural type system),既简化了事前设计工作,也为未来增加抽象层提供了非侵入式的解决方法。

  • 基于CSP模型的并行,简化了并发结构之间的通信和数据共享。为多核时代的程序开发打好基础。

  • 比线程更轻量的goroutine,让一个线程可以执行多个并发结构。不必使用异步通信,就足以达到线程池与select/poll/epoll的效果。极大简化了多连接的开发。

  • 使用一套简单的规范,开发人员不必再单独编写脚本指定依赖关系和编译流程。仅仅使用代码本身和go工具链,就可以处理各种依赖关系。写完代码,一条命令,自动下来各种依赖,直接编译/安装。无需make,autoconf,automake,setup.py等工具支持。

后续文章将会详细讲解golang语言特性。


大牛介绍

Robert Griesemer参与设计Chrome浏览器中的Javascript执行引擎V8,V8采用即时编译技术和分代(generational)的stop-the-world垃圾收集机制;

Rob Pike乃大名鼎鼎的人物,曾在贝尔实验室工作,是Unix操作系统、Plan9操作系统、Limbo编程语言和UTF-8编码的主要设计者,写过愤青式的文章Systems Software Research is Irrelevant,还有两本书The Unix Programming Environment和The Practice of Programming;

Ken Thompson是图灵奖获得者,是Unix操作系统、Plan9操作系统、UTF-8编码和B编程语言(C的前身)的创立者之一。在google,Ken和Robert还设计过过用于大规模数据分析的Sawzall语言;

Ian Lance Taylor是GCC社区的超级活跃人物,是gold连接器和GCC过程间优化LTO的主要设计者之一,是Zembu公司的创始人之一。


欢迎关注微信公众号:码术(codemanship)

Golang语言 与 C 语言 的比较学习

Golang语言 与 C 语言 的比较学习

总结

以上是小编为你收集整理的Golang语言 与 C 语言 的比较学习全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

Golang语言 之网络

Golang语言 之网络

                                                                                                     

Go语言标准库里提供的net包,支持基于IP层、TCP/UDP层及更高层面(如HTTP、FTP、SMTP)的网络操作,其中用于IP层的称为Raw Socket。

net包的Dial()函数用于创建网络连接,函数原型如下:

func Dial(net,addr string) (Conn,error)

其中net参数是网络协议的名字,addr参数是IP地址或域名;如果连接成功,返回连接对象,否则返回error。

目前,Dial()函数支持如下几种网络协议:"tcp"、"udp"、"ip"、"ip6"等,例如:

conn,err := net.Dial("tcp","192.168.0.10:2100")    // TCP连接 conn,err := net.Dial("udp","192.168.0.12:975")   // UDP连接 conn,err := net.Dial("ip4:icmp","www.baidu.com")  // ICMP连接

在成功连接连接后,可以使用conn的Write()和Read()方法读写数据。

实际上,Dial()函数是对DialTCP()、DialUDP()、DialIP()、DialUnix()函数的封装:

func DialTCP(net string,laddr,raddr *TCPAddr) (c *TCPConn,err error) func DialUDP(net string,raddr *UDPAddr) (c *UDPConn,err error) func DialIP(netProto string,raddr *IPAddr) (c *IPConn,err error) func DialUnix(net string,raddr *UnixAddr) (c *UnixConn,err error)

下面是一个TCP示例程序:

func checkerror(err error) { if err != nil { fmt.Fprintf(os.Stderr,"Fatal error: %s",err.Error()) os.Exit(1) } } func readFully(conn net.Conn) ([]byteBox-sizing: border-Box; color: rgb(0,error) { defer conn.Close() result := bytes.NewBuffer(nil) var buf [512] for { n,err := conn.Read(buf[0:]) result.Write(buf[0:n]) nil { if err == io.EOF { break } return nil,err } } return result.Bytes(),nil } func main() { addr := "127.0.0.1:80" conn,err := net.Dial("tcp"Box-sizing: border-Box; color: rgb(0,addr) checkerror(err) _,err = conn.Write([]byte("GET /api/v3/get HTTP/1.1/r/n/r/n")) checkerror(err) result,err := readFully(conn) checkerror(err) fmt.Println(string(result)) os.Exit(0) }


HTTP协议

Go语言标准库内建提供了net/Http包,涵盖了HTTP客户端和服务端的具体实现。

HTTP客户端

net/Http包的Client类型提供了如下几个方法:

func (c *Client) Get(url string) (r *Response,err error) func (c *Client) Post(url string,bodyType string,body io.Reader) (r *Box-sizing: border-Box; color: rgb(0,err error) func (c *Client) PostForm(url string,data url.Values) (r *Box-sizing: border-Box; color: rgb(0,err error) func (c *Client) Head(url string) (r *Box-sizing: border-Box; color: rgb(0,err error) func (c *Client) Do(req *Request) (r *Response,err error)

以GET方法为例:

resp,err := http.Get("http://cre.mix.sina.com.cn/api/v3/get")

if err != nil {
  fmt.Println("get Failed",err)
  return
}

defer resp.Body.Close()

io.copy(os.Stdout,resp.Body)

上面这段代码请求一个网站首页,并将其内容打印到标准输出流中。

如果希望对请求做更多的控制,可以使用DO()方法:

req,err := http.NewRequest("GET","http://cre.mix.sina.com.cn/api/v3/get"Box-sizing: border-Box; color: rgb(0,nil) req.Header.Add("User-Agent","Go GO") client := &http.Client{} resp,err := client.Do(req)

HTTP服务端

使用net/Http包提供的下面两个方法

func ListenAndServe(addr string,handler Handler) error func ListenAndServeTLS(addr string,certFile string,keyFile string,handler Handler) error

ListenAndServe()函数有2个参数,第一个参数addr即监听地址,第二个参数表示服务端处理程序,通常为空,使用默认的http.DefaultServeMux进行处理。

服务端的业务逻辑使用http.Handle()或http.HandleFunc(),会默认注入http.DefaultServeMux中,如:

http.HandleFunc("/foo",func(w http.ResponseWriter,r *http.Request) { fmt.Fprintf(w,"Hello,%q"Box-sizing: border-Box; color: rgb(0,html.Escapestring(r.URL.Path)) }) http.ListenAndServe(":8001",nil)


RPC协议

在Go中,标准库提供的net/rpc包实现了PRC协议需要的相关细节,开发者可以很方便地使用该包编写RPC的服务端和客户端程序。


json处理

在Web开发领域中,JSON被广泛用于web服务端程序和客户端之间的数据通信。

Go语言内建对JSON的支持,使用encoding/json标准库,开发者可以轻松使用Go程序生成和解析JSON格式的数据。

func Marshal(v interface{}) ([]Box-sizing: border-Box; color: rgb(0,error) func Unmarshal(vdata []byte,v interface{}) error

JSON编码的一个例子:

type Book struct { Title string Authors [] string Publisher string IsPublished bool Price float32 } func main() { gobook := Book { "Go programming"Box-sizing: border-Box; color: rgb(0,[]string { "XuShiwei","HughLv","Johnson"},"isturing.com.cn"Box-sizing: border-Box; color: rgb(0,trueBox-sizing: border-Box; color: rgb(0,9.99Box-sizing: border-Box; color: rgb(0,} // encode b,0);"> json.Marshal(gobook)  // 变量b 是一个[]byte类型 nil { fmt.Println(b) } // decode var book Book json.Unmarshal(b,&book) fmt.Println(book) }

当我们调用json.Marshal(gobook)函数时,会递归遍历gobook对象,如果发现gobook这个数据结构实现了json.Marshaler接口且包含有效的值,Marshal()就会调用其MarshalJSON()方法将该数据结构生成JSON格式的文本。

Go语言的大多数类型都可以转化为有效的JSON文本,但channel、complex和函数这几种类型除外;而对于指针,会转化为指针所指向的值,如果指针指向的是零值,那么null将作为转化后输出的结果。具体的转化规则如下:

  • 布尔值转化为JSON的bool类型;

  • 浮点数和整型转化为JSON的number类型;

  • 字符串将以UTF-8编码转化为Unicode字符集的字符串;

  • 数组和切片转化为JSON的array类型,但[]byte类型的值会被转化为Base64编码后的字符串,slice类型的零值会被转化为null;

  • 结构体转化为JSON的object类型,并且只有结构体中以大写字母开头的可被导出的字段才会被转化输出;

  • 转化一个map类型的数据结构时,该数据的类型必须是map[string] T。




查看原文:http://www.zoues.com/2016/10/20/golang%e8%af%ad%e8%a8%80-%e4%b9%8b%e7%bd%91%e7%bb%9c/

Golang语言 几个亟待解决的Go语言问题

Golang语言 几个亟待解决的Go语言问题

总结

以上是小编为你收集整理的Golang语言 几个亟待解决的Go语言问题全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

今天关于转--Golang语言-- Web 编程golang开发web的介绍到此结束,谢谢您的阅读,有关golang语言、Golang语言 与 C 语言 的比较学习、Golang语言 之网络、Golang语言 几个亟待解决的Go语言问题等更多相关知识的信息可以在本站进行查询。

本文标签: