Golang export symbol
导出的标识符 一个标志符被导出后就可以在其他包中使用,但是必须满足下面两个条件: 标识符的首字母是 Unicode 大写字母 (Unicode "Lu" 类); 而且 标识符要在包块中进行了声明,或是它是个字段名 /方法名。 而其他所有的标识符都不是导出的...阅读全文
导出的标识符 一个标志符被导出后就可以在其他包中使用,但是必须满足下面两个条件: 标识符的首字母是 Unicode 大写字母 (Unicode "Lu" 类); 而且 标识符要在包块中进行了声明,或是它是个字段名 /方法名。 而其他所有的标识符都不是导出的...阅读全文
GOROOT 其实就是golang 的安装路径 当你安装好golang之后其实这个就已经有了 GOPATH 作用: 存放sdk以外的第三方类库 自己收藏的可复用的代码 目录结构:$GOPATH目录约定有三个子目录 src存放源代码(比如:.go .c .h .s等) 按照golang默认约定,go run,go install等命令的当前工作路径(即在此路径下执行上述命令)。 pkg编译时生成的中间文件(比如:.a) golang编译包时 bin编译后生成的可执行文件(为了方便,可以把此目录加入到 {GOPATH/bin:}/bin添加所有的bin目录) Goland里边的Project GPPATH 这里有俩个一个是Global GOPATH 一个是Project GOPATH Globa...阅读全文
学习过Python或者java的朋友,都会习惯里面的类,而Golang中是没有类的概念,而有类似的概念结构体,结构体是一款功能强大的数据类型,能够简单的实现其他语言中类实现的功能,能够序列化json,支持继承,在继承时,继承父结构体的属性和父结构体的方法。同时结构体也像其他数据结构和函数一样,以大写字母开头的结构体能够导出本包,应用到其他包。而当开始定义的一些小写字母定义的结构体,我们想要用于其他包的时候,可以用工厂函数的方式实现。此外可以使用工厂函数结合定义某些方法实现面向对象的封装特性。封装的介绍: 封装(encapsulation)就是把抽象出的字段和对字段的操作封装在一起,数据被保护在内部,程序的其 它包只有通过被授权的操作(方法),才能对字段进行操作。 封装的理解和好处:1) 隐藏...阅读全文
基本语法 包 基本结构 包的基本结构如下 //程序运行的入口是包 `main`。 package main //导入包"fmt"和"math/rand" import ( "fmt" "math/rand" ) //或 import std "fmt" //指定别名 import "math" // 常量的定义 const PI = 3.14 // 全局变量的声明与赋值 var name = "gopher" // 一般类型声明 type newType int // 结构的声明 type gopher struct{} // 接口的声明 type golang interface{} // 函数的声明 func add(x int,y int) int{ return x + y } //...阅读全文
json 是现在非常常见的数据传递方式, go本身也集成了json的生成和解析 引入包 import { "bytes" "encoding/json" } 解析 定义 json 对应的实体类, 准确的说是结构体 type GoAccessToken struct { AccessToken string ExpiresIn int } 创建该结构体的引用 goAccessToken := &GoAccessToken{} 通过Unmarshal去解析json字符串 err := json.Unmarshal(str, goAccessToken) 最终的 goAcessToken 为解析后的对象 如果发现对象中的成员变量没有值, 请检查成员变量的首字母是否大写, 注意, json 字符串的...阅读全文
基础知识 - Golang 中的正则表达式 ------------------------------------------------------------ Golang中的正则表达式 ------------------------------------------------------------ 用法: ------------------------------ 单一: . 匹配任意一个字符,如果设置 s = true,则可以匹配换行符 [字符类] 匹配“字符类”中的一个字符,“字符类”见后面的说明 [^字符类] 匹配“字符类”外的一个字符,“字符类”见后面的说明 \小写Perl标记 匹配“Perl类”中的一个字符,“Perl类”见后面的说明 \大写Perl标记 匹配“P...阅读全文
------------------------------------------------------------ Golang中的正则表达式 ------------------------------------------------------------ 用法: ------------------------------ 单一: . 匹配任意一个字符,如果设置 s = true,则可以匹配换行符 [字符类] 匹配“字符类”中的一个字符,“字符类”见后面的说明 [^字符类] 匹配“字符类”外的一个字符,“字符类”见后面的说明 \小写Perl标记 匹配“Perl类”中的一个字符,“Perl类”见后面的说明 \大写Perl标记 匹配“Perl类”外的一个字符,“Perl类”见后面...阅读全文
尽管不是纯的OO语言,Go仍然提供了interface接口的功能,能够非常轻松地实现抽象与具体实现的分离。另外,按照文件名格式匹配的模式,Go程序可以自动帮你加载符合当前操作系统的对应接口实现(分析了编译时的.a包,发现编译时候自动匹配,并只把符合当前操作系统的实现打包),不需要程序员在程序里面使用if-else或者switch去实现,还算比较省心。 下面的例子,首先定义一个接口 I。接口I只有两个public的方法:Get() 和 Put()。注意方法名首字母必须大写。具体代码如下: //myservice.go package myinterface type I interface { Get() int Put(int) } 然后,按照Go的文件名匹配模式写不同操作系统的实现代码。具...阅读全文
gf提供了非常强大易用的数据校验功能,通过gvalid包提供,封装了40种常用的校验规则,支持单数据多规则校验、多数据多规则批量校验、自定义错误信息、自定义正则校验等特性。由于gf是模块化、低耦合设计,gvalid包也可以在项目中单独引入使用。 使用方式: ```go import "gitee.com/johng/gf/g/util/gvalid" ``` ### 校验规则 40种常用的校验规则: required 格式:required 说明:必需参数 required-if 格式:required-if:field,value,... 说明:必需参数(当任意所给定字段值与所给值相等时,即:当field字段的值为value时,当前验证字段为必须参数) required-unless 格式...阅读全文
前端代码 ``` $("#btn").click(function(){ $.post({ url: 'http://localhost:9999/class_add', dataType:"json", data: { class_name:"hulu", class_id:"55" }, success: function (res) { console.log(">>>>", res) } }) }) ``` 后端代码 ``` func (c *BlogController) Add() { c.Ctx.ResponseWriter.Header().Add("Access-Control-Allow-Origin", "*") c.Ctx.ResponseWriter.Header(...阅读全文
Go语言的正则表达式使用很简单,示例代码: package test import ( "fmt" "regexp" ) func RegixBase() { //findTest() //findIndexTest() //findStringTest() //findChinesString() //findNumOrLowerLetter() findAndReplace() } //传入[]byte,返回[]byte func findTest() { str := "ab001234hah120210a880218end" reg := regexp.MustCompile("\\d{6}") //六位连续的数字 fmt.Println("------Find------") //...阅读全文
2.2 Go基础 1. :=这个符号直接取代了var和type,这种形式叫做简短声明。不过它有一个限制,那就是它只能用在函数内部;在函数外部使用则会无法编译通过,所以一般用var方式来定义全局变量。 2. rune是int32的别称,byte是uint8的别称。不同类型的变量之间不允许互相赋值或操作,不然会在编译时引起编译器报错。 3. 尽管int的长度是32 bit, 但int 与 int32并不可以互用。浮点数的类型有float32和float64两种(没有float类型),默认是float64。 4. 大写字母开头的变量是可导出的,也就是其它包可以读取的,是公用变量;小写字母开头的就是不可导出的,是私有变量。 5. 大写字母开头的函数也是一样,相当于class中的带public关键词的...阅读全文
请使用Goland编辑器使用,设置请看goland设置篇 package名字 保持package的名字和目录保持一致,尽量采取有意义的包名,简短,有意义,尽量和标准库不要冲突。 import 规范 // 单包引入 import ( "fmt" ) // 多包引入,没包独占一行 import ( "encoding/json" "strings" "github.com/go-sql-driver/mysql" ) 常量声明 // 常量只能由英文字母组成 // 全部大写 const DIR = "/static/pic" 变量声明 // 变量只能由英文字母组成 // 变量全部使用小驼峰命名,根据是有需要导出决定首字母是否大写 // 多个变量申明使用var括号 var ( userAge int...阅读全文
概要 日常工作有时候需要编写命令行工具,相比Python这样的脚本语言,Golang可以直接编译成二进制文件,运行时不用依赖于环境。同时Golang也支持交叉编译,可以在Mac,Linux等多个环境下执行。 开发准备 Golang需要我们安装Go的开发环境。当前我们可以去 https://golang.google.cn/ 下载最新的Golang环境。 安装了Golang环境后,可能因为国内网络的原因无法下载第三方的包。比较好的方法是借助Go的proxy:https://goproxy.io/ 编译运行 使用 go build 来编译源文件,使用 go run来运行源文件。 例如,我们要编译 main.go 文件 go build main.go 依赖管理 Golang从1.11开始有了官方...阅读全文
我们知道Golang里都是通过结构体Struct来定义类和相关属性的。这里有点需要注意的是,属性的首字母大小写表示的意义是不同的! go中根据首字母的大小写来确定可以访问的权限。无论是方法名、常量、变量名还是结构体的名称,如果首字母大写,则可以被其他的包访问;如果首字母小写,则只能在本包中使用。 可以简单的理解成,首字母大写是公有的,首字母小写是私有的 但是这些都不是重点,毕竟这些很多人都知道。 还有一个很大的不同时超哥在写项目中遇到的(惭愧啊,go基础还是不扎实): 类属性如果是小写开头,则其序列化会丢失属性对应的值,同时也无法进行Json解析。 废话少说上代码 package main import ( "bytes" "encoding/gob" "log" "encoding/jso...阅读全文
自“灰子学技术”公众号原文链接:https://mp.weixin.qq.com/s/W6yL8aqXvmU7Vyd0riWIJw最近使用go的json包的时候,有一个struct tag标识,关于它的使用规则如下所示:1.这个标识在json调用marshal做序列化操作的时候,会把key值解析为struct tag定义的值。2.如果没有这个标识,在Key值是大写的时候,会将这个值的名字解析为序列化之后的Key值。如果是小写就会忽略,这个是因为Go规定首字母是大写字母是公有,小写字母是私有导致的。问题:一旦我们需要json序列化之后的结果中的Key值名称,希望是小写字母的时候,我们该怎么办?答案就是用struct tag,因为它可以讲大写字母重名命成小写字母。例子:备注:小写字母 Mars...阅读全文
日期:2014年7月30日 1、定义:包时函数和数据的集合。使用package关键字定义一个包,文件名不需要与包名一致,包名约定使用小写字符,Go包可以由多个文件组成,但是需要使用相同的package
统计出一篇文章中每个字母的使用次数,然后需要画出每个字母使用次数的直方图(条形统计图),请问用GO语言如何实现?多谢!...阅读全文
生成区间随机数 func RandInt(min, max int) int { if min >= max || min == 0 || max == 0 { return max } return rand.Intn(max-min) + min } 生成指定区间随机数(包括纯数字/纯字母/随机) const ( KC_RAND_KIND_NUM = 0 // 纯数字 KC_RAND_KIND_LOWER = 1 // 小写字母 KC_RAND_KIND_UPPER = 2 // 大写字母 KC_RAND_KIND_ALL = 3 // 数字、大小写字母 ) // 随机字符串 func Krand(size int, kind int) []byte { ikind, kinds, re...阅读全文
1. 简介 Go 语言中自带有一个轻量级的测试框架 testing 和自带的 go test 命令来实现单元测试和性能测试。 2. 要求 文件名必须是`_test.go`结尾的,这样在执行`go test`的时候才会执行到相应的代码 你必须 import `testing`这个包 所有的测试用例函数必须是`Test`开头 测试用例会按照源代码中写的顺序依次执行 测试函数`TestXxx()`的参数是`testing.T`,我们可以使用该类型来记录错误或者是测试状态 测试格式:`func TestXxx (t *testing.T)`,`Xxx`部分可以为任意的字母数字的组合,但是首字母不能是小写字母[a-z],例如`Testintdiv`是错误的函数名。 函数中通过调用`testing.T`...阅读全文
一 什么是模板 你一定听说过一种叫做MVC的设计模式,Model处理数据,View展现结果,Controller控制用户的请求,至于View层的处理,在很多动态语言里面都是通过在静态HTML中插入动态语言生成的数据,例如JSP中通过插入<%=....=%>,PHP中通过插入来实现的。通过下面这个图可以说明模板的机制 Web应用反馈给客户端的信息中的大部分内容是静态的,不变的,而另外少部分是根据用户的请求来动态生成的,例如要显示用户的访问记录列表。用户之间只有记录数据是不同的,而列表的样式则是固定的,此时采用模板可以复用很多静态代码二 Template 使用package mainimport("html/template""os")type Person struct{UserName st...阅读全文
在看别人的一些代码时,声明结构时有个json:name是做什么用的? 想知道原因得了解下: 在golang中,命名都是推荐都是用驼峰方式,并且在首字母大小写有特殊的语法含义:包外无法引用。但是由经常需要和其它的系统进行数据交互,例如转成json格式,存储到Redis等等。这个时候如果直接用属性名来作为键值会不符合项目要求。 于是就有了tag,也就是有了json:name或者orm:"size(1000)"也或者json:name orm:"size(1000)"这样的声明。 在我们把结构转成json时 就会以tag里面的名字出现。 下面这是我在用beego框架的orm声明的一个结构体 // 评论 type Comment struct { Id int64 `json:"id"` Tid i...阅读全文
方法一 通过ASCII码表判断并统计 package main import "fmt" func charactortype() { var s2 string = "112aaaaFGG123 *&^%" var e,s,d,o int for i := o; i < len(s2); i++ { switch { case 64 < s2[i] && s2[i] < 91: e += 1 case 96 < s2[i] && s2[i] < 123: e += 1 case 47 < s2[i] && s2[i] < 58: d += 1 case s2[i] == 32: s += 1 default: o += 1 } } fmt.Printf("字符串英文字符个数是: %d\n"...阅读全文
首先簡單地說一下GO語言的環境安裝,從 http://golang.org/dl/ 針對自己的操作系統選擇合適的安裝包,然後下載安裝即可,下載的時候注意別選錯了的操作系統,例如go1.3.1.darwin-386-osx10.6.tar.gz 這個是蘋果操作系統的安裝包,go1.3.1.linux-amd64.tar.gz 這個是64位linux的安裝包,go1.3.1.windows-amd64.msi 這個是64位windows系統的安裝包,安裝過程很簡單,參照說明一步一步進行即可,在此不再贅述,類似的文章一搜一大片.如果你不能訪問go語言的網站,那麼說明我們偉大的長城防火牆爲了您的安全把您給墻了.想辦法跳牆吧. 裝好了GO環境之後您可能要選擇一個適合您的IDE才行,在此列舉幾個,至於選...阅读全文
golang QQ:29295842 欢迎技术交流 go语言返回1-99之间随机数的方法 ```go package main import ( "fmt" "math/rand" ) func main() { max := big.NewInt(100) i, err := rand.Int(rand.Reader, max) } ``` 随机数 ```go package main import "fmt" import "math/rand" func main() { // 例如,rand.Intn 返回一个随机的整数 n,0 <= n <= 100。 fmt.Print(rand.I...阅读全文
1、变量定义的几种方式 如: //方式一:普通定义 var a int = 1 fmt.Println("a = ", a) //方式二:类型推导 var b = 10 fmt.Println("b = ", b) //方式三:省略var name := "tom" fmt.Println("name = ", name) //多变量声明 var n1, n2, n3 int fmt.Println("n1 = ",n1 ,"n2 = ", n2,"n3 = ",n3) var n4, name1, n5 = 100, "tom", 888 fmt.Println("n4 = ",n4 ,"name1 = ", name1,"n5 = ",n5) n6, name2, n7 := 100, ...阅读全文
前言: 本系列还没流产,继续难产中,哈哈,只怪我没专心,在期间又偷偷去学了python,ruby,scala,haskell这几种语言,如果你不幸是本系列的读者,那么你得慢慢等后面的了,等不及可以过几年再来看看啊^_^。因为,Go语言没那么迫切需要用到,而且个人兴趣比较广泛,要玩的东西太多了,自然暂时无法一口气完成Go的学习。对于读者,只能说非常抱歉啦。废话不多说了,今天补上一篇。 Go语言之枚举定义: 在Go语言中通过关键字const来定义枚举,const之前我们也遇到过,它用来定义常量,小样还挺厉害,还能定义枚举: 上面的例子中,定义了一个关于星期的枚举,当打印Friday时候输出5。打印Sunday输出0。其实,在Go语言中,枚举似乎就是常量一种特殊形式,只不过在上述代码中出现了关键字...阅读全文
json不用多说,一种跨语言的交换协议,这里探讨一下Go语言对json的支持。 Go对于json有官方自己的解析包,先谈一下json的解码方式。解码的api如下: func Unmarshal (data []byte, v interface{}) 在go中,json解码的数据结构有两种,一种是解析到结构体,一种是解析到空的interface。 以数据 {"changes": [{"index":5, "armid":6},{"index":9,"armid":10}]} 为例 1,解析到结构体 package main import ( "encoding/json" "fmt" ) func main() { type change struct { Index int Armid i...阅读全文
GO语言中要提供给外面访问的方法或是结构体必须是首字母大写 在一个公共的头文件中定义了一个结构体,如下所示: type Header struct { ver int magic_num int len int } 在另一个执行文件中,进行了初始化和赋值: var head comm.Header; head.ver = 1 head.magic_num = 0xffee head.len = 0 编译时报错 ./example_struct2binary.go:21: head.ver undefined (cannot refer to unexported field or method ver) ./example_struct2binary.go:22: head.magic_nu...阅读全文
本文介绍Go 标准库 strings 常用导出函数,结构体及其方法。 import strings 12 import strings strings 包实现了用于操作字符串的简单函数,包括 strings 导出函数和 Reader, Replacer 两个结构体。 1. strings 常用导出函数 判断字符串与子串关系 func EqualFold(s, t string) bool // 判断两个utf-8编码字符串,大小写不敏感 func HasPrefix(s, prefix string) bool // 判断s是否有前缀字符串prefix func Contains(s, substr string) bool // 判断字符串s是否包含子串substr func Contai...阅读全文
载:http://www.jincon.com/archives/257/ http://www.liguosong.com/2013/07/07/golang%E7%9A%84%E5%B0%8F%E6%80%BB%E7%BB%93/ 1、Go编程的风格,可以以组为单位进行申明变量和常量,以及加载包。 2、Go语言支持简单的函数,条件和循环风格,把括号都给省掉了 3、 大写字母开头的变量是可导出的,也就是其它包可以读取的,是公用变量;小写字母开头的就是不可导出的,是私有变量。 4、大写字母开头的函数也是一样,相当于class中的带public关键词的公有函数;小写字母开头的就是有private关键词的私有函数。 5、go语言是不需要以分号结尾的,这个和python非常类似。 6、Go语言是支...阅读全文
go中的struct可以实现oop中的类、方法。go语言中的struct成员可以是任何类型,如普通类型、复合类型、函数、struct、interface等。 入门 //定义 type User struct { name string email string password string } //声明 var user User var userref *User fmt.Println(user) //{} 默认初始化为零值 fmt.Println(userref) //
开头感谢sspanel的作者orvice大神!【转载请注明】 博主最近在搭建sspanel v3,中间坑确实挺多的,我回头开贴补充一下,ss服务器端我选择了orvice的shadowsocks-go mu版,因为作者是基于流量控制的机理,实际上奸商都是通过时间控制(233),所以我就寻思在作者的基础上加以修改,添加时间的限制。 上一篇博客中我实现了mysql api的修改,这一篇是web api。开始我以为orvice是在php api做控制的,看了api发现不是(还是webapi直接控制好啊,修改方便= =),数据库修改等请去看上一帖传送门 找到user结构体,路径shadowsocks-go-mu\mu\webapi\user.go 结构体修改,注意,这里的字段和json字段不能相同,不...阅读全文
go语言中需要自己写各种函数方法来实现。下面的代码只代表个人在极少的时间内写出代码的结果,并不代表最优算法。 func main() { fmt.Println('0') fmt.Println(randUpString(10)) fmt.Println(randLowString(10)) fmt.Println(randIntString(5)) fmt.Println(randstr(10)) } //取得随机字符包含数字、大小写等,可以自己随意扩展。 func randstr(l int) string { var inibyte []byte var result bytes.Buffer for i := 48; i < 123; i++ { switch { case i < ...阅读全文
提到vim的模糊查找插件,很多人第一反应是`ctrlp.vim`,`ctrlp`知名度很高,但跟其它的同类插件相比,它的唯一优点是用vimL编写(这让它的性能是所有同类插件中最差的)。本文向大家推荐一款模糊查找插件——[LeaderF][1],无论是从性能还是匹配精度上,都远远超越ctrlp。 ## [LeaderF][1]是什么? `LeaderF`是一个用Python写的vim插件,可以在成千上万数十万个文件中,通过模糊查找的方式,快速找到目标文件。它还有很多衍生功能:快速打开或定位某个buffer、最近使用的文件(mru)、tags(包括函数、类、变量等)、命令历史、文件中的某一行、vim的help、marks等等。 ### 查找文件 文件查找是vimer的常用操作,海...阅读全文
在Go中首字母大写和小写,决定着这此变量能否被外部调用, 比如:在使用标准库的json编码自定一的结构的时候:
package main import ( "encoding/json" "fmt" ) type T struct { name string Age int } func main() { var info T = T{"fyxichen", 24} fmt.Println("编码前:",info)...阅读全文
将字符串里面的英文小写转成大写,是一个很简单的操作。每个字符的编码可以认为是整数,Golang里面的byte和rune是uint8和int32。其它语言大同小异。在编码表当中,位置是是从A到Z,接着是a到z,A对应的整数是65,a对应的整数是97,中间差了26个英文字母和6个其它字符的长度共32。所以转换的方法就是,将小写字母的值,剪掉32即可。 还是编码的问题。最早的出现的编码是ASCII,从128个增加到256个字符。再到后面的Unicode、GBK等,这些新出的编码和最早的ASCII都是兼容的,也就是说,不同的编码里面,前256位都是一样的。所以,在这里的英文字符转大写问题,不存在编码问题。 这个题目在Golang的strings包里有专门的实现ToUpper,此函数内部封装了unic...阅读全文
## 起因 周五在做```go test```测试时,碰到个问题,我要对一个```xxx```函数写测试样例,然而它的首字母是小写的,没有导出,单元测试过不去,而这个```xxx```函数外面还有一个```YYY```函数首字母是大写的,但要经过很长的逻辑才能到```xxx```函数。这时我又要完成对```xxx```函数进行测试,又不想经过```YYY```函数走逻辑,该怎么办呢? ## 实现过程 首先,绝对不能做的事: - 将```xxx```函数改为首字母大写的```Xxx```函数 原因:很多地方都在调这个函数,你改了这一处只满足你这次的测试,那其他基本业务流程也就崩了。 我目前是在```test```文件夹里新建了一个```xxx_test.go```测试文件,样子长这样 ```g...阅读全文
import后面接的是目录的名字,而不是所谓包的名字,并且如果一个目录下面还有目录的话都必须要写进去,比如: import "MyPackage" import "MyPackage/MyInnerPackage" 在这里讲明白了import后面接的是目录名而不是文件名更不是所谓的包名,那么一个目录下面的文件可以是多个包的吗?不可以 package main import "MyPackage" import "MyPackage/MyInnerPackage" import "OtherPackage" func main() { MyPackage.MyFunc(); MyPackage.MyFunc(); MyInnerPackage.MyInnerFunc() OtherPackag...阅读全文
 这个程序为什么会先输出大写字母呢,书上说第一个goroutine完成所有显示需要花时间太短了,以至于在调度器切换到第二个goroutine之前,就完成了所有的任务,按照这样说也应该是先输出小写字母才对啊??? 求解答,谢...阅读全文
接口理解:type Operation interface{ Cut(a Integer) Add(a Integer)}type Integer intfunc (a Integer)Cut(b int) Integer{ return a-b}func (a Integer)Add(b int)Integer{ return a+b}var a Integer =0var foo Operation = ago语言会自动根据a类型所具有的方法,也就是Integer所具有的方法 自动生成func (a *Integer)Cut(b int) Integer{ return a-b}func (a *Integer)Add(b int)Integer{ return a+b}所以说 接口中的...阅读全文
结构定义如下,在tag中写明在xml中的映射关系。可以是子节点,也可以是属性,还可以是chardata。当然,结构的成员必须是大写字母打头的,对外可见。多层节点可以用大于号连接,如“onentry>action”。用chardata时,tag为`xml:”,chardata”`。 // state machine for unmarshal json type stateMachine struct { Defaultstate bool `xml:"defaultstate,attr"` Initialstate string `xml:"initialstate,attr"` Timeoutstate string `xml:"timeoutstate,attr"` States []s...阅读全文
通常情况下语言入门前会讲一堆背景和特性,目的是为了能让学习者对该语言有一个大概的认识,但这里我想直接进入细节,不是因为任性,而是因为常量是编程语言最基本的组成元素,这与语言背景无关。一、字面常量在说明字面常量之前先说一下魔鬼数字,哪么什么是魔鬼数字呢?func calculatePrice(price float32) float32{ return price * 0.8}这个方法中的0.8就是魔鬼数字(没有具体含义),它导致代码难以理解,这里的0.8表示折扣的意思,为了清晰起见,上面的代码可以如下修改:const discount float64 = 0.8 // 定义折扣常量func calculatePrice(price float32) float32{ // 计算折扣后的价格 ...阅读全文
go正则表达式大全 ackage test import ( “fmt” “regexp” ) func RegixBase() { //findTest() //findIndexTest() //findStringTest() //findChinesString() //findNumOrLowerLetter() findAndReplace() } //传入[]byte,返回[]byte func findTest() { str := “ab001234hah120210a880218end” reg := regexp.MustCompile(“\d{6}”) //六位连续的数字 fmt.Println(“——Find——”) //返回str中第一个匹配reg的字符串 dat...阅读全文
什么是Go? go是一门并发支持、垃圾回收的编译型系统编程语。旨在创造一门具有在静态编译语言的高性能和动态语言的高并发之间拥有良好平衡点的一门编程语言。 官方网站:https://golang.org Go特点 类型安全和内存安全 以非常直观和极低代交的方案执行高并发 高效的垃圾回收 快速编译 UTF-8支持 go的存在价值 Go在谷歌:以软件工程为目的的语言设计 安装 下载链接: http://www.golangtc.com/download 安装比较简单,直接点击下一步就可 安装好之后,软件会自动帮我们配置path环境。 安装okey以后,可以通过再命令提示符中输入go env 查看go语言编译参数 GOPATH设置 goPath有什么用呢? GOPATH是一些目录,用于go来查找包的...阅读全文
规则 在golang源代码中,经常看到各种文件名,比如: bolt_windows.go。 下面对文件名命令规则的说明: 平台区分 文件名_平台。 例: file_windows.go, file_unix.go 可选为windows, unix, posix, plan9, darwin, bsd, linux, freebsd, nacl, netbsd, openbsd, solaris, dragonfly, bsd, notbsd, android,stubs 测试单远 文件名test.go或者 文件名平台_test.go。 例: path_test.go, path_windows_test.go 版本区分(猜测) 文件名_版本号等。 例:trap_windows_1.4.go ...阅读全文
go语言学习笔记 1、一些技巧 分组声明 在Go语言中,同时声明多个常量、变量,或者导入多个包时,可采用分组的方式进行声明。 例如下面的代码: import "fmt" import "os" const i = 100 const pi = 3.1415 const prefix = "Go " var i int var pi float32 var prefix string 可以分组写成如下形式: import( //分组的方式进行声明 导入多个包 "fmt" "os" ) const( //分组的方式进行声明 声明多个常量 i = 100 pi = 3.1415 prefix = "Go_" ) var( //分组的方式进行声明 声明多个变量 i int pi float32 pr...阅读全文
Go程序的一般结构:Go程序是通过package来组织的(与python类似)只有package名称为main的包可以包含main函数一个可执行程序有且仅有一个mian包通过import关键字来导入其他非main包通过const关键字来进行常量的定义通过在函数体外部使用var关键字来进行全局变量的声明和赋值通过type关键字来进行结构(struct)或接口(interface)的声明通过func关键字来进行函数的声明Go语言的基础组成包声明引入包函数变量语句&表达式注释Go导入package的格式-- 导入包之后,就可以使用格式