Go语言中文网 为您找到相关结果 284

go语言 接口 小记

接口理解: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}所以说 接口中的...阅读全文

博文 2014-12-25 01:00:02 gandilong

go 用结构解析XML

结构定义如下,在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...阅读全文

博文 2016-02-10 18:00:01 logsharp

【Go语言】【3】GO语言常量

通常情况下语言入门前会讲一堆背景和特性,目的是为了能让学习者对该语言有一个大概的认识,但这里我想直接进入细节,不是因为任性,而是因为常量是编程语言最基本的组成元素,这与语言背景无关。一、字面常量在说明字面常量之前先说一下魔鬼数字,哪么什么是魔鬼数字呢?func calculatePrice(price float32) float32{ return price * 0.8}这个方法中的0.8就是魔鬼数字(没有具体含义),它导致代码难以理解,这里的0.8表示折扣的意思,为了清晰起见,上面的代码可以如下修改:const discount float64 = 0.8 // 定义折扣常量func calculatePrice(price float32) float32{ // 计算折扣后的价格 ...阅读全文

博文 2017-02-09 15:57:52 qingkechina

Golang之一个简单的聊天机器人

翠花,上代码 package main import ( "bufio" "fmt" "os" "strings" ) func main() { //从标准输入读取数据 inputReader := bufio.NewReader(os.Stdin) fmt.Println("Please input your name:") //读取数据直到遇见\n位置 input, err := inputReader.ReadString('\n') if err != nil { fmt.Printf("An error occurred:%s\n", err) //异常错误后退出 os.Exit(1) } else { //用切片操作删除最后的\n name := input[:len(inpu...阅读全文

博文 2018-01-10 16:30:02 pyyu

go 正则表达式

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...阅读全文

博文 2016-09-10 18:00:02 guoer9973

Go编程入门教材

什么是Go? go是一门并发支持、垃圾回收的编译型系统编程语。旨在创造一门具有在静态编译语言的高性能和动态语言的高并发之间拥有良好平衡点的一门编程语言。 官方网站:https://golang.org Go特点 类型安全和内存安全 以非常直观和极低代交的方案执行高并发 高效的垃圾回收 快速编译 UTF-8支持 go的存在价值 Go在谷歌:以软件工程为目的的语言设计 安装 下载链接: http://www.golangtc.com/download 安装比较简单,直接点击下一步就可 安装好之后,软件会自动帮我们配置path环境。 安装okey以后,可以通过再命令提示符中输入go env 查看go语言编译参数 GOPATH设置 goPath有什么用呢? GOPATH是一些目录,用于go来查找包的...阅读全文

博文 2016-09-16 14:00:02 hsd2012

Golang文件名命名规则

规则 在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 ...阅读全文

博文 2019-10-18 01:32:47 aside section ._1OhGeD

go基础——02(一些技巧 、一些规则)

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...阅读全文

博文 2014-12-22 17:00:01 shaozhang872196

Go程序结构 GO GO

Go程序的一般结构:Go程序是通过package来组织的(与python类似)只有package名称为main的包可以包含main函数一个可执行程序有且仅有一个mian包通过import关键字来导入其他非main包通过const关键字来进行常量的定义通过在函数体外部使用var关键字来进行全局变量的声明和赋值通过type关键字来进行结构(struct)或接口(interface)的声明通过func关键字来进行函数的声明Go语言的基础组成包声明引入包函数变量语句&表达式注释Go导入package的格式​-- 导入包之后,就可以使用格式.来对包中的函数进行调用;-- 如果导入包之后未调用其中的函数或者类型将会报出编译错误​package 别名- 当使用...阅读全文

博文 2018-06-04 22:34:35 nitobe

golang Reflect包

Reflect包 Reflect 反射包有2个重要的类型,分别通过Typeof()和ValueOf()返回。 分别在源码包里的reflect包中的type.go和value.go Type TypeOf() 返回一个Type接口类型,源码中 type Type interface { Align() int FieldAlign() int Method(int) Method MethodByName(string) (Method, bool) NumMethod() int Name() string PkgPath() string Size() uintptr String() string Kind() Kind Implements(u Type) bool Convertib...阅读全文

Golang 基础语法-基本变量(2)

Golang 基础语法-基本变量(2) 变量的零值说明 数值类型变量的零值为 0 布尔类型变量的零值为 false 字符串类型变量的零值为 "” 变量的类型转换语法 golang 中不同类型之间的变量赋值需要显式的转换 //语法格式 T(v) 将 v 转换为 类型 T var i int = 32 var f float64 = float64(i) var u uint = uint(64) 变量的定义(声明) 使用 var 声明无论在函数内还是函数外,都可以使用 var 声明变量 基本语法格式为:var varName varTypevar varName = varValuevar varName1, varName2 varTypevar varName1, varName2 = v...阅读全文

博文 2017-12-06 06:04:45 luxixing

《Go语言程序设计》第4章练习

4.1 写一程序求y值(x值由键盘输入)。 y = (sinx+cosx)/2, x>=0 y = (sinx-cosx)/2, x<0 4.2 输入一个字符,判断它如果是小写字母输出其对应的大写字母;如果是大写字母输出其对应的小写字母;如果是数字输出数字本身;如果是空格输出“SPACE”;如果不是上述情况输出“Other”。 4.3 有三个数a、b、c,由键盘输入,输出其中最大的数。 4.4 输入一个数,判断它能否被3或者5整除,如至少能被这两个数中的一个整除则将此数打印出来,否则不打印,编出程序。 4.5 读入1-7之间的某个数,输出表示一星期中相应的某一天的单词:Monday、Tuesday等,使用switch语句实现...阅读全文

《Go语言程序设计》第3章练习

3.1 输入一个三位整数,求出该数每个位上的数字之和。如123,每个位上的数字之和就是1+2+3=6。 3.2 输入三个float64类型浮点数,分别求出它们的和、平均值、平方和以及平方和的平方,并输出所求的各个值。 3.3 设f表示华氏温度、c表示摄氏温度、k表示绝对温度,将华氏温度转换为摄氏温度和绝对温度的公式分别为: c=5/9*(f-32) k=273.16+c 编写程序,要求通过键盘输入f的值,计算c和k的值并输出。 3.4 编写程序,把极坐标(r,θ)转换为直角坐标(x.y),其中的θ单位为度。转换公式是: x = r * cosθ y = r * sinθ 3.5 通过键盘输入英文字符串,并统计字符串中的英文字母个数,同时输出字符串字节长度...阅读全文

golang fmt 占位符

package mainimport ( "fmt")//fmt占位符func main() { var n = 100 //查看类型 fmt.Printf("%T\n", n) //类型 fmt.Printf("%v\n", n) //相应值的默认格式 fmt.Printf("%b\n", n) //二进制表示 fmt.Printf("%d\n", n) //十进制表示 fmt.Printf("%o\n", n) //八进制表示 fmt.Printf("%x\n", n) //十六进制表示,字母形式为小写 a-f var s = "Hello,你好!" fmt.Printf("%s\n", s) //输出字符串表示(string类型或[]byte) fmt.Printf("%v\n", s...阅读全文

博文 2019-12-11 15:32:53 平凡之路001

go 语言学习笔计之结构体

go 语言中的结构体方法 结构体名称的大小写有着不同的意义: 小写表示不能被别的包访问 package main import "fmt" type Rect struct { width,height int } func (r *Rect) area() int { return r.width*r.height; } func main() { r:=Rect{width:10,height:10} fmt.Println(r.area()); rp:=&r; fmt.Println(rp.area()); } 使用结构体来解析xml 首先我们看xml的格式,对于属性(attr)和节点使用是不一样的, 具体的使用方式如下 阅读全文

博文 2015-07-11 03:00:02 witwave

Fourth glance in Go

在Go里面的结构体和方法是很有意思的内容。它即和OO有点像,但又不完全一样。为什么这么说呢?当你把结构体映射为OO里面的类的时候,你给结构体添加方法,你就会发现其实方法与结构体并没有严格意义上的关系。在Go里面,方法是绑定到接受者上的。什么是接受者?一个对象,这个对象可以是任何类型,int,string, struct, interface ...。 func (t *Type) method_name(parameters) return type 但是同名的方法,在同一个类型上只能出现一次。而且该类型必须与方法在同一个包中。 另外一点是内嵌结构体的问题,方法是可以被继承的。也就是说一个结构体被内嵌到另一个结构体中,那么父结构体也就具有了内嵌结构体的方法 >>person.go -----...阅读全文

博文 2015-02-12 03:00:01 moonz-wu

GO语言反射机制

反射机制基本和Java等类似,可获取struct或变量的类型 值等信息。获取或修改对象的值时,一定要判断该属性是否为可操作状态,否则会导致错误。 示例代码如下: package main import ( "fmt" "reflect" ) ///首字母大写表示该字段可导出,并可修改值 type User struct { ID int name string //未导出 Age int } func (u User) Info() { fmt.Println(u) } func GetInfo(o interface{}) { t := reflect.TypeOf(o) fmt.Println(t.Name()) v := reflect.ValueOf(o) for i := 0; i...阅读全文

博文 2015-06-17 23:05:56 genispan

go语法之一

Go语法: Go语言要求public的变量必须以 大写字母开头,private变量则以小写字母开头,这种做法不仅免除了public、private关键字,更重要的是统一了命名风格。 Go语言对{ }进行了强制,必须如下写法: if expression { ... } 下面的写法是错误的: if expression { ... } Go代码的花括号位置是非常统一的; 最有意思的其实还是 Go 语言首创的错误处理规范: f, err := os.Open(filename) if err != nil{ log.Println("Open file failed:", err) return } defer f.close() 1、defer 关键字;defer语句的含义是不管程序是否出现异...阅读全文

博文 2015-06-30 03:00:00 chris-cp

Golang小实战 开发Web常用工具 第一弹

> 我只是一枚小菜鸟,不会并发,不会分布式,也不会自动化、大数据,只有浅显的技术,只是想大概分享下做的一些小工具。每天早上醒来签到已经成为一种习惯,偶尔回答下问题,索性活跃度不是很高,没啥可说的了。 **上预览图** ![QQ截图20171218190603.png](https://static.studygolang.com/171219/221a75b5b56218140022ea8df8519c8a.png) *平时可能要自己加密或者随机生成一段字符串做密码或者其他的加密用途,上面的预览图是我喜欢的某网站的风格图,模仿其功能,采用 iview + axios + golang 技术,进行功能还原,代码很一般,如果有错误请批评指正。下面是还原预览图* !...阅读全文

学习go语言的第一天

Go语言优势: •静态语言,强类型。静态编译能帮我们检查出来大量的错误,go的强类型甚至变态到不支持隐式的类型转换。 •gofmt,应该这是我知道的第一个官方提供统一格式化代码工具的语言了。有了gofmt,大家的代码长一个样了,也就没有花括号到底放到结尾还是新开一行这种蛋疼的代码风格讨论了。因为大家的代码风格一样,所以看go的代码很容易。 •天生的并行支持,因为goroutine以及channel,用go写分布式应用,写并发程序异常的容易。没有了蛋疼的callback导致的代码逻辑割裂,代码逻辑都是顺序的。 •性能,go的性能可能赶不上c,c++以及openresty,但真的也挺强悍的。在我们的项目中,现在单机就部署了一个go的进程,就完全能够胜任以前200个python进程干的事情,而且C...阅读全文

博文 2015-07-19 03:00:02 lovlin

go语言总结第一章

需要注意的地方:1.整型数据的溢出; 一个int8型整数的最大值是127,如果在加上一就是-128.2.特殊类型:复数: 复数实际上由两个浮点数构成,一个表示实部,一个表示虚部。3.Go语言规定,函数,控制结构等的左大括号“{”必须和函数声明或控制结构放在同一行。如果将左大括号放在函数声明,控制语句的下一行,编译器会在左大括号的前方自动加一个大括号,可能导致程序异常。4.Go对多语言的支持。5.函数名首字母为小写,即为private 函数名首字母为大写,即为publi...阅读全文

Go基础系列:struct的导出和暴露问题

struct的导出和暴露问题 关于struct的导出 struct的属性是否被导出,也遵循大小写的原则:首字母大写的被导出,首字母小写的不被导出。 所以: 如果struct名称首字母是小写的,这个struct不会被导出。连同它里面的字段也不会导出,即使有首字母大写的字段名。 如果struct名称首字母大写,则struct会被导出,但只会导出它内部首字母大写的字段,那些小写首字母的字段不会被导出。 也就是说,struct的导出情况是混合的。 但并非绝对如此,如果struct嵌套了,那么即使被嵌套在内部的struct名称首字母小写,也能访问到它里面首字母大写的字段。 例如: type animal struct{ name string Speak string } type Horse str...阅读全文

博文 2018-11-23 09:11:27 f-ck-need-u

golang 读取 post json 信息

package main import ( "encoding/json" "fmt" ) type fileinfo struct { FileName string // 首字母大写 } type jsonfile struct { File []fileinfo // 与“file”对应,但是首字母需要大写 } // 预定post过来数据 // 正常情况下 r.Boyd 中获取数据 // ioutil.ReadAll(r.Body) 获得信息 []byte func main() { str := `{"file":[{"fileName":"text.exe"},{"fileName":"aria2.conf"}]}` var s jsonfile json.Unmarshal([]...阅读全文

博文 2018-02-24 15:33:04 304158

Go语言:正則表達式的使用

Go语言的正則表達式使用非常easy。演示样例代码: 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------...阅读全文

博文 2015-12-22 03:00:01 gcczhongduan

GO编程基础

什么是Go? Go是一门并发支持、垃圾回收的编译型系统编程语言,旨在创造一门具有在静态编译语言的高性能和动态语言的高效开发之间拥有良好平衡点的一门编程语言。 Go的主要特点: 类型安全和内存安全 以非常直观和极低代价的方案实现高并发 高效的垃圾回收机制 快速编译(同时解决C语言中头文件太多的问题) 为多核计算机×××能提升中的方案 UTF-8编码支持 ----- Go存在的价值是什么? [GO 在谷歌:以软件工程为目的的语言设计请添加链接描述](https://www.oschina.net/translate/go-at-google-language-design-in-the-service-of-software-engineering) ----- Go命令 在命令行或终端输入go...阅读全文

博文 2019-04-29 20:35:11 类似简单

Go2将修改导出规则

Go2将修改导出规则, 只有小写字母和”_“开头的不导出. 中文等不区分大小写的标识符默认导出. A solution that's been kicking around for a while: For Go 2 (can't do it before then): Change the definition to “lower case letters and _ are package-local; all else is exported”. Then with non-cased languages, such as Japanese, we can write 日本語 for an exported name and _日本語 for a local name. This ru...阅读全文

Go操作Redis

Start 在SF文章中,关于PHP,python操作redis的文章已经很多了。可是少了go对redis的操作。最近也是刚开始学Go,由于对redis的偏爱,也顺便学习了一下,并总结下来。 Go-Redis包管理 很明显,我们Go是没有这个包的,那么我们可以利用GO的命令。首先我们得先配置GOPATH的路径,我选择的是/data/go/goSource作为我包的路径,所以shell执行如下 export GOPATH=/data/go/goSource go get github.com/alphazero/Go-Redis这样就载下了Go-Redis包了 代码验证 确认redis服务已经开启 redis.conf注意bind ip 确认可以被连接 code package main im...阅读全文

博文 2017-02-09 14:18:46 Lowky

Golang推荐的命名规范

很少见人总结一些命名规范,也可能是笔者孤陋寡闻,作为一个两年的golang 开发者,我根据很多知名的项目,如moby, kubernetess等总结了一些常见的命名规范。命名规范可以使得代码更容易与阅读,更少的出现错误。1、文件命名规范由于文件跟包无任何关系,而又避免windows大小写的问题,所以推荐的明明规范如下:文件名应一律使用小写,不同单词之间用下划线分割, 命名应尽可能地见名知意。2、常量命名规范常量明明用 camelcase来命名示例如下更多go语言内容请关注:http://www.fastgolang.co...阅读全文

博文 2019-07-08 20:32:43 CC_ab48

Go语言struct tag介绍

一、tag说明先介绍一下``(反引号):反引号用来创建 原生的字符串字面量 ,这些字符串可能由多行组成(不支持任何转义序列),原生的字符串字面量多用于书写多行消息、HTML以及正则表达式。在处理json格式字符串的时候,经常会看到声明struct结构的时候,属性的右侧还有反引号括起来的内容。如下:1234type User struct { UserId int `json:"user_id" bson:"user_id"` UserName string `json:"user_name" bson:"user_name"`}要比较详细的了解这个,要先了解一下golang的基础,在golang中,命名都是推荐都是用驼峰方式,并且在首字母大小写有特殊的语法含义:包外无法引用。但是由经常需要和...阅读全文

博文 2018-08-06 21:35:26 hgqxjj

GoLand Json 解析

GoLnand 这门语言 比较特殊,靠标志符的大小写来决定访问域,而不是像传统java,c++那样使用关键字限定访问。 看个例子: 这里定义了一个解析结构体 type Response struct { code int64 msg string data string } 执行json解析 func main() { var resp Response err:=json.Unmarshal([]byte(` {"code":200,"msg":"success","data":"Macbook Pro 2018 款"}`),&resp) if err !=nil { return }else { fmt.Println(resp) } } image.png 然而json数据并没有成功解...阅读全文

博文 2018-07-16 14:34:47 litesky

Go struct tag

struct成员变量标签(Tag)说明 要比较详细的了解这个,要先了解一下golang的基础,在golang中,命名都是推荐都是用驼峰方式,并且在首字母大小写有特殊的语法含义:包外无法引用。但是由经常需要和其它的系统进行数据交互,例如转成json格式,存储到mongodb啊等等。这个时候如果用属性名来作为键值可能不一定会符合项目要求。 ==示例代码: package main import ( "encoding/json" "fmt" "reflect" ) type User struct { UserId int `json:"user_id"` UserName string `json:"user_name"` } func main() { // 输出Json格式 u := &U...阅读全文

博文 2018-07-24 11:30:01 vincenshen

让我们一起Go(十二)

前言: 上篇中,我们讲到了在Go语言中如何定义方法,今天,我们将进一步深入Go语言的面向对象编程。 一、Go语言中的接口 首先来看一个最基本的接口: 和定义一个结构体类似,只不过将struct换成了interface,然后声明了两个函数:draw()和count()。就这么简单,一个接口就定义好了,那么如何实现接口呢?在java中我们会让一个类去实现接口,在实现的时候必须用implements关键字显示声明去实现,如: class myshow implements show{...} 在Go语言中,不需要这么做,我们要做的只是去实现接口声明的所有函数就可以了,如下所示,就实现show这个接口: 上面代码,我们的osArgs结构体实现了文章开头给出的show这个接口。其实就是用到上一篇的内容...阅读全文

博文 2015-09-05 00:00:00 a6652162

go语言——Hello Word!

package main import "fmt" func main(){ fmt.Pritln("Hello Word!") } 我们这个程序的函数名称是main。尽管名称没有限制,但main包的main函数是每一个可执行程序的入口。而“包”则包装了相关的函数、变量和常量,要用import导入,才可以使用。例如:我们导入fmt包,才可以使用它的Println函数。 双引号里的“Hello Word!”是Go的字符串常量。和C的字符串不同,Go程序不可以改变字符串的内容,而仅仅是将其地址和长度作为字符串的值,复制给参数。也可以说,Go的参数传递,都是值的传递,而没有其他语言的那种间接的引用参数。 Go语言将代码风格强制统一,例如Go语言要求public的变量必须以大写字母开头,privat...阅读全文

博文 2016-02-21 04:00:00 u012992473

Golang 之 struct

声明一个struct 声明一个 struct 的语法如下: type struct_name struct { body } 例如: type Person struct { name string age uint8 } 关于 struct 字段的可见性 如果一个 struct 的字段以大写字母开头, 则表示这个字段是导出的, 即可以在其他包中访问这个字段, 例如: type Person struct { Name string age uint8 } 上面的例子中, 因为 Person 的 Name 字段是大写字母开头, 因此可以在其他包访问它, 而 age 是小写字母开头, 因此仅仅能在包内访问. struct 字面量 我们可以使用 struct 字面量来实例化一个 struct, ...阅读全文

博文 2016-08-19 13:00:00 xys1228

go中的面向对象

总体来看,go语言中的面向对象在使用方式上是灵活易用的,可以说设计理念真的很先进,让人有一种如沐春风的感觉。 如果你在学生时代经历了一个从c到c++的学习历程,你是否还记得,老师会说c++是面向对象的,所以我们不必再使用c中的结构体作为数据结构。我们只需定义的是c++中的类,因为类中不只有成员属性,也有成员函数。换句话说, class是可以完美替代struct的,而且更强大。 回到go中,我们的面向对象使用的就是struct,但时代不同了,这次我们的struct也可以有"成员函数"了。 定义一个典型的面向对象方式 package main import "fmt" type Human struct { height float32 weight int } func (h Human) B...阅读全文

博文 2017-07-20 05:04:53 Dr_Zhang

GO面向对象

GO面向对象 GO中没有隐藏的this指针 类型系统 类型系统是一个语言的类型体系,GO的类型系统包含以下基本内容: - 基础类型,如byte、int、bool、float等 - 复合类型,如数组、结构体、指针等 - 可以指向任意对象的类型 - 值语义和引用语义 - 面向对象,即所有具备面向对象特征的类型 - 接口 GO语言的类型系统: - 给任意类型添加响应的方法 type Integer int func (a Integer) Less(b Integer) bool { return a < b } 值语义和引用语义 GO语言中的大多数类型都基于值语义,包括: - 基本类型,如byte、int、bool、float32、float64和string等; - 复合类型,如数组、结构体和...阅读全文

博文 2016-04-18 12:00:04 u011409264

Go 笔记和疑问?

0. Go语言的可见性原则: - 函数名首字母小写为 private - 函数名首字母大写为 public 1. 传递变长参数 - 要加 ... - 可以全部传递, 也可以传递一个切片 - 多重传递是, 值传递 ? 引用传递(slice) 2. defer 语句 - defer语句向函数注册退出调用, 当函数退出是, defer语句才会执行, 不管函数是否正常退出都会执行. - 会保存状态吗? // 下面的调用结果是 : 0 func f(){ i := 0 defer fmt.Println(i) i++ return } - defer 用于清理工作很方便: 将关闭释放资源和打开资源物理位置放在一起. srcFile, err := os.Open("MyFile") defer src...阅读全文

博文 2015-09-30 03:00:01 roger9567

gf框架之gvalid – 强大灵活的数据校验/表单校验模块

gf提供了非常强大易用的数据校验功能,通过gvalid包提供,封装了40种常用的校验规则,支持单数据多规则校验、多数据多规则批量校验、自定义错误信息、自定义正则校验等特性。由于gf是模块化、低耦合设计,gvalid包也可以在项目中单独引入使用。 使用方式: import "gitee.com/johng/gf/g/util/gvalid" 校验规则 40种常用的校验规则: required 格式:required 说明:必需参数 required-if 格式:required-if:field,value,... 说明:必需参数(当任意所给定字段值与所给值相等时,即:当field字段的值为value时,当前验证字段为必须参数) required-unless 格式:required-unle...阅读全文

《读书笔记系列》 《The Way to Go》中文译本 知识点整理

学习某个语言后,忽然停用个半年的,很容易就忘记。又要重新学习! 所以为了快速 学习+回顾 golang,做了这个概要整理 先说下golang资料整理 The Way to Go 中文译本 4.2.1 包的概念、导入与可见性 你必须在源文件中非注释的第一行指明这个文件属于哪个包 如:package main。 package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。 包名只能是 小写字母 如果对一个包进行更改或重新编译,所有引用了这个包的客户端程序都必须全部重新编译。 导入包的写法 //method 1 import "fmt" import "os" //method 2 import "fmt";import "os" //method 3 i...阅读全文

博文 2015-10-10 03:00:23 scotth

Golang 让你欢喜、让你忧....

主题: 今天小试了一下Golang 一个小时吧! 对于习惯了C/C++ 、Python、lua语法的我,上手难度不高,很随意就写出了几个简单的小程序。 但是这个随意也让你在某些地方卡壳了一下: 1、 编译的时候,参数的问题; 2、 包引入机制方面; 3、 语法特点上面; 首先建立3个文件夹: 1、src 2、bin 3、pkg 让我恼怒: 1、 就是万恶的import 与package玩法了。 也许是为了配合build project中的自动构建吧!反正为了调试import文件,我是整了将近半小时。而且最可恨的是前面花费的25分钟我都不知道错在哪? 什么?你说我没仔细看Golang的文章!好吧,如果不仔细看,鬼才会知道import导出方法必须得首字母大写?package 是可以将一个文件切分...阅读全文

博文 2016-10-14 17:00:14 水果糖

golang操作json

Encode golang和json的类型对应关系如下: bool类型 -- JSON的Boolean 整数,浮点数等数值类型 -- JSON的Number string -- JSON的字符串(带""引号) struct -- JSON的Object (再根据各个成员的类型递归打包) 数组或切片 -- JSON的Array []byte -- 会先进行base64编码然后转换为JSON字符串 map -- JSON的Object。key必须是string interface{} -- 按照内部的实际类型进行转换 nil -- JSON的null channel,func等类型 -- 返回UnsupportedTypeError 在golang中,encoding/json包下函数Marsh...阅读全文

博文 2017-08-08 12:05:06 ifcoder

【Leetcode】:242. Valid Anagram问题 in Go语言

Given two strings s and t, write a function to determine if t is an anagram of s. For example, s = "anagram", t = "nagaram", return true. s = "rat", t = "car", return false. Note: You may assume the string contains only lowercase alphabets. Follow up: What if the inputs contain unicode characters? How would you adapt your solution to such case? 这个问...阅读全文

博文 2016-05-23 00:00:03 u013564276

Golang学习笔记之结构体(struct)上

结构体(struct)是用户自定义的类型,它代表若干字段的集合。 • 值类型,赋值和传参会复制全部内容。可⽤ "_" 定义补位字段,⽀持指向⾃⾝类型的指针成员。 •结构体内字段⽀持 "=="、 "!=", 结构体就支持相应操作 •可⽤作 map 键类型。 一、定义 //包内使用首字母小写,包外使用首字母大写 type employee struct { firstName string lastName string age int } 二、初始化的几种方式 //初始化方式1 var emp1 employee emp1.firstName = "hello" emp1.lastName = "world" emp1.age = 20 fmt.Println(emp1) //初始化方式2利用...阅读全文

博文 2018-12-06 18:34:42 学生黄哲

golang封装结果集

之前找过很多结果集封装都不是很好,所以自己封装了下。 strFirstToUpper 字符串首字母转化为大写 /** * 封装结果集 */ func RowResult(rows *sql.Rows) []interface{} { //字典类型 //构造scanArgs、values两个数组,scanArgs的每个值指向values相应值的地址 columns, _ := rows.Columns() values := make([]sql.RawBytes, len(columns)) scanArgs := make([]interface{}, len(values)) for i := range values { scanArgs[i] = &values[i] } var r...阅读全文

博文 2016-11-29 07:00:04 yang8023tao

golang实现dns域名解析(二)

上一节已经讲了如何构造dns请求包的情况,这一节接着上一节的情况,谈谈dns查询报文中的问题部分。问题部分中每个问题的格式如下: 查询名是要查找的名字,它是一个或者多个标识符的序列。每个标识符以首字母字节的计数值来说明随后标识符的字节长度,每个查询名以最后字节为0结束,长度为0的标识符是根标识符。具体情况我们抓个包看看: 我们看到请求的名字是www.baidu.com发出的包的内容是下面的红线标识的部分,要查找的名字被转变成了3www5baidu3com这种的格式,所以我们在构造dns查询请求包的时候,需要把查询的名字格式改改: var ( buffer bytes.Buffer segments []string = strings.Split(domain, ".") ) for _, ...阅读全文

博文 2017-06-04 04:46:35 chase-wind

go语言解析json库

json库: xiezj@u197-254:~/xzjtest$ vi t2.json { "aaa":[ { "name": "Platypus", "Order": "Monotremata" }, { "Name": "Quoll", "Order": "Dasyuromorphia" } ] } 在json库的中键名不需要区分大小写 --------------------------------------- 在go中的结构成员必须要首字母大写 成员名字同json库中的健名,这里不区分大小写 type Animal struct { Name string Order string } type abc struct { AAa []Animal } 如果在go中定义的成员名字同j...阅读全文

博文 2015-06-17 23:07:45 strangerLove

go - method方法

method 1. 值与引用 varName2 = varName1 varName2.funcName() 如果 varName2 有变化,varName1 无变化,则为值类型(传递) 如果 varName2 有变化,varName1 有变化,则为引用类型(传递) 2. Method 格式: func (r [*]ReceiverType) funcName(param) (result) {...} 注: a. r 为struct对象的接收者,接收者不同,方法也不同 b. r 可以为值传递也可以为引用传递 c. param 和 result 可有可无,与普通函数一样 d. 调用方法,用 "." 连接,即 r.funcName() e. func (r *ReceiverType) fun...阅读全文

博文 2015-10-25 11:00:05 chuangrain