在学Go语言
开始学点儿Go语言,这语言据说在国内比在国外火,社区上褒贬不一,不过“小马过河”嘛,总要先自己试试再来下结论。
环境准备:
1.在Golang中国下载安装go语言,个人喜欢用msi安装,直接帮你设置环境变量,免得手动弄。
2.安装goclipse:在eclipse官网下载最新版eclipse,安装后进入菜单Help -> Install New Software,输入网址http://goclipse.github.io/releases/。注意在读出的长长的列表中选择goclipse即可,千万别全选(血的教训),然后一路Next。
3.安装好goclipse后,在eclipse配置(Window -> Preferences)中选Go菜单,里面的GOROOT和GOPATH自行指定,前者当然就是go的根目录,后者自行指定一个目录。
4.如果在控制台无法运行git命令,即电脑中未安装git客户端,则需要下载msysgit并安装,这是为第5步做准备。
5.点开菜单Go-Tools,点Download gocode的大按钮,会自动下载安装gocode,并放到上一步你指定的GOPATH里。
6.下载GDB(我图省事直接在csdn下的),将exe文件放到系统path中,即让命令行运行gdb能够生效(我是将它直接放到go文件夹下的bin里了),这样goclipse就能断点调试了。
学习体会:
这里有go语言的中文文档,入门读七牛出的《Go语言编程》个人觉得不错,该书附录有“常用包介绍”,对照着去文档看看挺好。
语法上,一般评价是“乏善可陈”,不花哨,走实用主义路线,看书第1章提到的,自动垃圾回收,丰富的内置类型,函数多返回值,错误处理,匿名函数闭包,类型接口,并发编程,反射,都比较基本,还有些动态语言常见的讨喜的语法糖,除了多返回值之外,出彩的地方不多,但Go是强类型的。
这意味着编译器能帮你做很多事,错误检查,语法提示,这能减轻程序员的不少负担,编译的结果比如exe程序,直接放到服务器裸机上就能跑,不像python啊nodejs它们需要现在目标机器上安语言,减轻了点工作量(同样是发布一个web程序,除了程序之外,java需要安个java环境再安个应用服务器,nodejs需要安个nodejs语言环境,而go啥都不用安),但如果在裸机上跑四个编译后的程序,依赖库就是四份的体积了,而python之类只有一份,大家公用。不过这不太重要。
重要的是Go最拿手的做网络服务器的能力,使用轻量级的协程,能胜任很大的并发量(几百万),而且协程是语言天生支持的,启动一个新协程直接go xxFun就好,xxFun是函数,Go里函数是一等对象。
用基础库做网络编程,语法简单得令人发指,看书的第5章,个人的helloworld如下(更高深的还没研究):
package main
import (
"bufio"
"fmt"
"io/ioutil"
"log"
"net"
"net/http"
"os"
)func main() {
//httpServer()
//httpClient()
//tcpClient()
//tcpServer()
test()
}func test() {
ch := make(chan int, 1)
for{
select {
case ch <- 0:
case ch <- 1:
}
i := <-ch
fmt.Println("Value", i)
}
}func cmd() {
for {
reader := bufio.NewReader(os.Stdin)
input, _ := reader.ReadBytes('\n')
println(string(input[0 : len(input)-1]))
}
}//http服务器
func httpServer() {
http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello"))
})
log.Fatal(http.ListenAndServe(":90", nil))
}//http客户端
func httpClient() {
client := &http.Client{}
reqest, _ := http.NewRequest("GET", "http://427studio.net", nil)
response, _ := client.Do(reqest)
if response.StatusCode == 200 {
body, _ := ioutil.ReadAll(response.Body)
bodystr := string(body)
fmt.Println(bodystr)
}
}//tcp客户端
func tcpClient() {
conn, _ := net.Dial("tcp", "182.92.10.238:42769")//写
fmt.Fprintf(conn, "getgames\n")
data, _ := bufio.NewReader(conn).ReadString('\n')//读
fmt.Printf("%#v\n", data)
}//tcp服务器
func tcpServer() {
ln, err := net.Listen("tcp", ":6010")
if err != nil {
panic(err)
}
for {
conn, err := ln.Accept()
if err != nil {
log.Fatal("get client connection error: ", err)
}
go _service(conn)
}
}
//tcp服务器使用的服务函数
func _service(conn net.Conn) {
data, err := bufio.NewReader(conn).ReadString('\n')
if err != nil {
log.Fatal("get client data error: ", err)
}
fmt.Printf("%#v\n", data)
fmt.Fprintf(conn, "hello client\n")
conn.Close()
}func checkErr(e error){
if e != nil {
fmt.Fprintf(os.Stderr, "%s", e.Error())
}
}
目前就学了这点儿,明天想个点子做服务器+多客户端的命令行游戏玩玩。
在学Go语言的更多相关文章
- 小C的故事(快速学C语言,,,极速版!)
前几天这篇博客写了太多废话! 删啦~~. 本篇博客只是为chd A协的全嫩小鲜肉入门C语言的预科, 如果你在此处学习C语言, 不幸走火入魔, 小弱概不负责. //请直接随便找个C语言编译器,抄一下下面 ...
- 边看MHA源码边学Perl语言之一开篇
边看MHA源码边学Perl语言之一开篇 自我简介 先简单介绍一下自己,到目前为此我已经做了7年左右的JAVA和3年左右php开发与管理,做java时主要开发物流行业的相关软件,对台湾快递,国际快递,国 ...
- 快看Sample代码,速学Swift语言(1)-语法速览
Swift是苹果推出的一个比较新的语言,它除了借鉴语言如C#.Java等内容外,好像还采用了很多JavaScript脚本里面的一些脚本语法,用起来感觉非常棒,作为一个使用C#多年的技术控,对这种比较超 ...
- 我为什么要学Go语言
# 我为什么要学Go语言 ### 公司的强烈推荐---之前也了解过Go语言并没有觉得有什么了不起,Go能做的其他语言都能做. ### 网上查找学习Go语言的理由---网上大体有两类人,一类说Go是大公 ...
- 为什么学Python语言,只需四步全面了解Python语言
为什么学Python语言,只需四步全面了解Python语言每个时代都会悄悄犒赏会选择的人,Python现在风口的语言Python--第三大主流编程语言Python , 是一种面向对象的解释型计算机程序 ...
- 小朋友学C语言(7)
数组 一.数组简介 C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合.数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量. 数组的声明并不是声明一个个单独的变量,比 ...
- 快看Sample代码,速学Swift语言(2)-基础介绍 快看Sample代码,速学Swift语言(1)-语法速览
快看Sample代码,速学Swift语言(2)-基础介绍 Swift语言是一个新的编程语言,用于iOS, macOS, watchOS, 和 tvOS的开发,不过Swift很多部分内容,我们可以从C或 ...
- C语言和C++的应用领域都在哪些?学C语言好,还是学习C++好?
从事嵌入式开发十几年,基本上围绕着这两种编程语言展开,都可以直接操作底层的编程语言,用的越熟练越是感觉工具属性越强.虽然两种编程语言分属于不同的编程思想,用的时间长了觉得差异也不是很大,现在就个人的从 ...
- 从零开始学C语言
从零开始学C语言 @阆苑祁寒 更新时间:2019-09-13 写在前面:本文从一个初学者的角度,给出了对C语言的简单理解.如有谬误,敬请指出! Week1——基本语法 #include <std ...
- 重学C语言
重学C语言 #include <stdio.h> int main() { ; ; printf("I am %d year old.\n",age); printf( ...
随机推荐
- Super Jumping! Jumping! Jumping!——E
E. Super Jumping! Jumping! Jumping! Time Limit: 1000ms Memory Limit: 32768KB 64-bit integer IO forma ...
- iOS Core Animation
1.什么是Core Animation? 它是一套包含图形绘制,投影,动画的OC类集合.它就是一个framework.通过CoreAnimation提供的接口,你可以方便完成自己所想要的动画. 2.我 ...
- 怎么在Centos7下添加win8.1的启动项
首先找到启动文件. 在/boot/grub2目录下, 找到grub.cfg文件. 然后, sudo修改, 用gedit工具方便. 怎么修改? 打开文件, 找到有两个menuentry开头的部分, 然 ...
- 阶乘之和--nyoj91
描述 给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No: 输入 第一行有一个整数0<m<10 ...
- Shell编程中括号判断中赋值语句和判断语句
#!/bin/bash declare var="xxx" # without space and use one = #1.judge whether the assignmen ...
- HTML中禁用表单控件的两种方法readonly与disabled
时候我们会希望表单上的控件是不可修改的,比如在修改密码的网页中,显示用户名的文本框就应该是不可修改状态的,下面与大家分享下禁用表中控件的两种方法 在网页的制作过程中,我们会经常使用到表单.但是有时候我 ...
- ThinkPHP3.2.3 的异常和错误屏蔽处理
一.入口文件关闭调试,配置文件配置异常页面 在生产环境中系统的错误信息不能暴露给用户,入口文件的 APP_DEBUG 默认为开启状态 define('APP_DEBUG',true); 此时如果用户访 ...
- 24 个你应该了解的 PHP 库
24 个你应该了解的 PHP 库 2015-09-08 分类:WEB开发.编程开发.首页精华暂无人评论 来源:伯乐在线 分享到:更多3 二十万年薪PHP工程师培养计划 成为被疯抢的And ...
- RadioButton Control
Horizontal Radiobuttons Column2 is DataGridViewTextBoxCell Horizontal Custom Radiobuttons => usin ...
- 一步一步来做WebQQ机器人-(二)(第一次登陆)
// 预计会有这些步骤,当然某些步骤可能会合并: 验证码 第一次登陆 第二次登陆 保持在线和接收消息 获取好友和群列表 发送消息 变成智能的(*゚∀゚*) webqq的登陆,分为2步,本文主要讲第一次 ...