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

golang之Json编码解码

编码json.Marshal()func Marshal(v interface{}) ([]byte, error)解码json.Unmarshal()func Unmarshal(data []byte, v interface{}) errorjson TO struct在线转译 :http://json2struct.mervine.net/json to go滴滴团队研发(据说比官方快6倍):https://github.com/json-iterator/goWarning:Json转结构体,或结构体转Json,结构体首字母必须大写!!!​ package main import ( "fmt" "encoding/json" ) func main() { type Stude...阅读全文

博文 2019-02-26 16:57:29 caoyouming

Golang 中的“潜规则”

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

博文 2016-08-31 14:00:04 nellson

Golang语言之JSON md5

package main import ( "encoding/json" //自带的json工具 "fmt" ) //github.com/pquerna/ffjson/ffjson // 这个json工具,比自带的json效率要高很多 // 而且接口,完全一样, type worker struct { Name string `json:"worker_name"` //转换成json格式时,key就是worker_name Sex string salay int32 //注意,json时,不会对这个属性操作,因为salay是小写 } func main() { // 1、对数组形式,进行编码 x := [5]int{1, 2, 3, 4, 5} bytes, e := json.M...阅读全文

博文 2018-07-19 21:35:13 故新

彬哥笔记 --10 Go语言 接口实现多态

大家好,我是彬哥,本节给大家讲下go语言接口实现多态的例子。 多态概念: 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。 代码如下: package main import ( "fmt" ) /* 接口 例子 1. 实现多态 2. 主要首个字母的大小写表示其他包的...阅读全文

博文 2018-12-28 15:34:50 Golang语言社区

Go 语言结构

一.Go 语言的基础组成有以下几个部分: 1.包声明 2.引入包 3.函数 4.变量 5.语句 & 表达式 6.注释 // 当前程序的包名 package main // 导入其他包 import . "fmt" // 常量定义 const PI = 3.14 // 全局变量的声明和赋值 var name = "gopher" // 一般类型声明 type newType int // 结构的声明 type gopher struct{} // 接口的声明 type golang interface{} // 由main函数作为程序入口点启动 func main() { Println("Hello World!") } //前面加个点表示省略调用,那么调用该模块里面的函数,可以不用写模块名...阅读全文

go中strings包的完整使用教程

关于go语言中strings包的完全使用教程 1. func Compare(a, b string) int {} 比较返回一个按字典顺序比较两个字符串的整数。如果a == b则结果为0,如果a b则结果为+1。 此外:仅包含与包字节对称的比较。使用内置字符串比较运算符==,<,>等通常更清晰,速度更快。 fmt.Println(strings.Compare(“a”,“b”)) fmt.Println(strings.Compare(“a”,“a”)) fmt.Println(strings.Compare(“b”,“a”) ) 输出: -1 0 1 注意:使用大于等于小于同样可以得到同样的答案。 2. func Contains(s, substr stri...阅读全文

博文 2019-05-16 00:35:24 qq5c9c828bc8d4b

《Go语言四十二章经》第二十五章 面向对象

《Go语言四十二章经》第二十五章 面向对象 作者:李骁 ## 25.1 Go 中的面向对象 我们总结一下前面看到的:Go 没有类,而是松耦合的类型、方法对接口的实现。 OO 语言最重要的三个方面分别是:封装,继承和多态,在 Go 中它们是怎样表现的呢? **封装(数据隐藏):** 和别的 OO 语言有 4 个或更多的访问层次相比,Go 把它简化为了 2 层: 1)包范围内的:通过标识符首字母小写,对象 只在它所在的包内可见 2)可导出的:通过标识符首字母大写,对象 对所在包以外也可见类型只拥有自己所在包中定义的方法。 **继承:** 用组合实现,内嵌一个(或多个)包含想要的行为(字段和方法)的类型;多重继承可以通过内嵌多个类型实现。 **多态:** 用接口实现,某个类型的实例可以赋给它所实现...阅读全文

博文 2018-10-12 20:29:50 roteman

GO入门

package main // 定义当前包名称 import "fmt" import "math" // 上述可以合并为 import ("fmt" "math") func main() { fmt.Println("hello ", math.Pi, "world"); //首字母大些的才会从包中导出,其他的符号都是不可见的。 } func add( a int , b int ) int { // 参数类型放到参数名称的后面, 返回值类型放到最后, 相同的参数类型甚至可以在最后一相同的类型声明时指定。 return a + b; } 函数可以返回任意数量的返回值 func swap( a , b string) (string, string) { // 返回值要放到括号中 retu...阅读全文

博文 2016-04-11 01:00:16 hnhbdss

PHP To Go 转型手记 (三)

前言 作为一名PHP程序员,我感到荣幸。但在时代不断的变迁中,要具备足够的知识才可生存。 那就从Go语言学起把。 希望看到本篇文章的你可以对Go有一个基本的认识。本系列文章与我自己学习Go语言的方式去描述。以PHP代码与Go代码的对比加以区分理解。 Go没有类的概念,本章在语法使用上来对比PHP与Go之间的区别。 声明类 PHP class User{} Go type User struct{} 成员变量 PHP class User{ public $name; public $age; } Go type User struct { username string age int } 变量修饰 PHP class User{ public $name; private $age; } ...阅读全文

博文 2018-11-04 15:34:38 CrazyCodes

golang如何访问一个结构体(struct)的未导出域(field)

golang如何访问一个结构体(struct)的未导出域(field) 问题的引出 在做fabric调试的时候,经常碰到证书验证失败的问题,看到orderer日志类似: | [cauthdsl] deduplicate -> ERRO 177 Principal deserialization failure (the supplied identity is not valid: x509: certificate signed by unknown authority (possibly because of "x509: ECDSA verification failure" while trying to verify candidate...阅读全文

博文 2018-11-09 17:35:00 CodingCode

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

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

Go微服务系列 - 第三部分 - 嵌入数据库和JSON

第三部分: Go微服务 - 嵌入数据库和JSON 在第三部分,我们让accountservice做一些有意义的事情。 声明一个Account结构体。 嵌入简单的key-value存储,我们可以在里边存储Account结构。 将结构体序列化为JSON, 然后通过HTTP服务来为/accounts/{accountId}提供服务。 源代码 源代码位置: https://github.com/callistaen...。 声明Account结构体 结构体的详细说明可以参照参考链接部分的相关链接查看。 在我们的项目根目录accountservice下面创建一个名为model的目录。 在model目录下面创建account.go文件。 package model type Account struct...阅读全文

博文 2018-05-21 21:34:37 WalkerQiao

[用Golang刷LeetCode之 5] 500. Keyboard Row

题目 问题链接:https://leetcode.com/problems/keyboard-row/#/description Given a List of words, return the words that can be typed using letters of alphabet on only one row’s of American keyboard like the image below. Example 1: Input: ["Hello", "Alaska", "Dad", "Peace"]Output: ["Alaska", "Dad"] Note: You may use one character in the keyboard more than onc...阅读全文

博文 2017-08-14 09:05:00 miltonsun

golang-字符串

字符串比较相等 func main() { fmt.Println("ADN" == "ADN") fmt.Println("ADN" == "adn") fmt.Println(strings.Compare("ADN", "ADN")) fmt.Println(strings.Compare("ADN", "adn")) fmt.Println(strings.EqualFold("ADN", "ADN")) fmt.Println(strings.EqualFold("ADN", "adn")) } Compare比"=="快,两种方法都区分大小写 EqualFold比较UTF-8编码在小写的条件下是否相等,不区分大小写。 字符串拼接 fmt.Sprintf 和 strings.Joi...阅读全文

博文 2017-08-21 12:05:10 ifcoder

关于Golang的使用

1.Golang 同一package下不同文件方法的调用,方法首字母需大写即可 2.Golang方法参数传递,需要声明变量类型 3.Golang http请求,不校验证书的方法 tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, } client := &http.Client{Transport:tr} client.PostForm(url,info...阅读全文

博文 2017-09-03 16:30:05 xiledada

三、Go语言基础结构解析

本系列文章均为学习过程中记录的笔记,欢迎和我一起来学习Go语言。 全文使用环境如下: Go语言版本:1.14 操作系统:deepin 使用工具:Goland开发工具 本篇我们进行学习Go语言项目基础结构 我们在上一节时编写了第一个Hello World image.png 这块代码我们从上向下来看。 第一行是package main,这里是指的包的概念,在go语言中包是代表这个文件夹中所有go代码的目录,这里是main,在Go语言程序中一个可独立执行的程序必须需要有mian这个包,即package main是我们整个程序的入口。而我们日常编写时会新建各种各样用途的go文件,我们通常使用不同的文件夹来区分,这时不同文件夹中的文件我们统一采用一种包的命名方式,便于我们在其他地方使用。详细使用方式...阅读全文

博文 2020-04-29 00:34:11 cn華少

掌握这些Go语言特性,你的水平将提高N个档次(二)

前言: 大家好,我是asong,这是我的第二篇原创文章。上一文介绍了切片、变量声明、defer三个知识点(回顾上文,关注公众号即可进行阅读),这一文将继续介绍其他Go语言特性,废话不多说,直接上干货。 1. 指针和引用 在Go语言中只有一种参数传递的规则,那就是值拷贝,其包含两种含义: 函数参数传递时使用的值拷贝 实例赋值给接口变量,接口对实例的引用是值拷贝 我们在使用过程中会发现有时明明是值拷贝的地方,结果却修改了变量的内容,有以下两种情况: 直接传递的是指针。指针传递同样是值拷贝,但指针和指针副本的值指向的地址是同一个地方,所以能修改实参 参数是复合数据类型,这些符合数据类型内部有指针类型的元素,此时参数的值拷贝并不影响指针的指向。 在Go语言中,复合类型chan、map、slice、i...阅读全文

博文 2020-05-07 19:34:21 Golang梦工厂

golang

这两天看《自己编写java虚拟机》,重新学习了golang.1.GOPATH是一批目录. go build和go install会在这些目录下的src目录中找package.不管当前目录是哪里。2.一个目录必须是同一个包,子目录是另一个包。包名和目录名可以不同.import的是目录,调用的是包名.函数。一个src下可以有多个目录,每个目录都有main包,每个目录都像一个工程。也可以搞多个GOPATH,每个是一个工程3.首字母大写代表public. 总是忘记。4.指针和对象type Cat struct{}p := &Cat{...阅读全文

博文 2017-08-13 12:04:58 zyzyzzy

Golang学习笔记

什么是包?为什么使用包? 到目前为止我们见到的 Go 程序都只有一个文件,文件中包含了一个main函数和几个其他函数。在实际中这种将所有代码都放在一个文件里的组织方式是不可行的。这样的组织方式使得代码变得无法重用和维护困难。包(package)用于解决这样的问题。 包用于组织Go源代码,以获得更好的重用性和可读性。包提供了代码封装的机制从而使得Go应用程序易于维护。例如,假设我们正在开发一个图像处理应用,它提供了诸如图像裁剪,锐化,模糊和增色等功能。一种组织代码的方式是将所有实现同一功能的代码放在一个独立的包中。例如裁剪功能可以放在一个单独包中,而锐化功能可以放在另一个包中。这种做法的优点是:增色功能可能需要做一些锐化的处理,那么增色代码中可以简单地导入(我们即将讨论导入)锐化包,使用其中提...阅读全文

博文 2018-01-04 21:33:05 coder_kev

Golang 入门系列(五)GO语言中的面向对象

前面讲了很多Go 语言的基础知识,包括go环境的安装,go语言的语法等,感兴趣的朋友可以先看看之前的文章。https://www.cnblogs.com/zhangweizhong/category/1275863.html。 今天GO语言中的面向对象。 GO语言中的面向对象 其实GO并不是一个纯面向对象编程语言。它没有提供类(class)这个关键字,只提供了结构体(struct)类型。 java或者C# 里面,结构体(struct)是不能有成员函数的。然而,Go语言中的结构体(struct)可以有"成员函数"。方法可以被添加到结构体中,类似于一个类的实现。 我个人觉得Go 语言在的面向对象,其实更简单,也更容易理解。 学过java或C# 的人应该都知道,面向对象的三个基本特征:封装、继承和...阅读全文

博文 2018-08-31 12:30:01 zhangweizhong

Go字符串常用方法

更多方法,请见golang中文https://studygolang.com/pkgdoc // 1. =============统计字符串长度,按字节len(str) // ASCII码:一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。 // UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节 // go中都以utf8进行编码 str1 := "hello world 哈哈" fmt.Println("str len=", len(str1)) // 18 // 2. =============字符串遍历,同时处理有中文的问题 r:=[]rune(str) // 常规遍历时,一个中文占三个字节,直接遍历...阅读全文

博文 2019-12-26 08:32:42 领带衬有黄金

golang基础

1、程序实体与关键字 在Go语言中,变量、常量、函数、结构体和接口被统称为“程序实体”,而它们的名字被统称为“标识符”。 标识符可以是任何Unicode编码可以表示的字母字符、数字以及下划线“_”。不过,首字母不能是数字或下划线。 标识符首字母大写为公有,小写为私有。 Go语言的关键字如下表: ![image.png](https://static.studygolang.com/180414/3cb912f4148300290a8f151ced7d7e1c...阅读全文

go语言工厂模式

作者:HaigLee https://www.jianshu.com/u/67ec21fb270d 本文由 HaigLee 发布。未经许可,禁止转载。 1. 说明 Golang 的结构体没有构造函数,通常可以使用工厂模式来解决这个问题。 2. 需求示例 一个结构体的声明: package model type Student struct{ Name string ... } 因为这里的Student 的首字母S是大写的,如果我们想在其它包括创建Student 的实例(比如main包),引入model 包后,就可以直接创建Student 结构体的变量(实例)。但是问题来了,如果首字母是小写的,比如是: type student struct{ ... } 那么直接使用就不行了,这时候该怎么办...阅读全文

博文 2019-12-30 02:32:37 HaigLee

Effective Go小记一

英文原文:https://docs.huihoo.com/go/golang.org/doc/effective_go.html 阅读小记: 1、go语言使用gofmt统一编码风格,包括排列和缩进。 2、关于注释,文章建议每个package子句之前都应该有关于包的说明,每个方法之前同样要对该方法进行说明;以方便godoc抽取相关内容并展示。 3、命名在go中非常重要,比如首字母是否大写决定在程序包之外的可见性。文章建议包名字均使用小写,力求简洁,包本身是根据路径选择源路径,若包名冲突,可在程序中将冲突的包重命名。 另外,文件对传统上的getter和setter做了自己的观点,认为getter不需要加Get关键字,当然setter加Set关键字是合理的...阅读全文

博文 2019-04-14 22:34:44 Zhang小二

关于 goroutine 调度问题

学习 goroutine 的时候看过这个例子,不太明白为什么会这样?请看代码: ``` // This sample program demonstrates how to create goroutines and // how the scheduler behaves. package main import ( "fmt" "runtime" "sync" ) // main is the entry point for all Go programs. func main() { // Allocate 1 logical processor for the scheduler to use. runtime.GOMAXPROCS(1...阅读全文

golang的字符串拼接

常用拼接方法 字符串拼接在日常开发中是很常见的需求,目前有两种普遍做法: 一种是直接用 += 来拼接 s1 := "Hello" s2 := "World" s3 := s1 + s2 // s3 == "HelloWorld" s1 += s2 // s1 == "HelloWorld" 这是最常用也是最简单直观的方法,不过简单是有代价的,golang的字符串是不可变类型,也就是说每一次对字符串的“原地”修改都会重新生成一个string,再把数据复制进去,这样一来将会产生很可观的性能开销,稍后的性能测试中将会看到这一点。 第二种是使用bytes.Buffer // bytes.Buffer的0值可以直接使用 var buff bytes.Buffer // 向buff中写入字符/字符串 b...阅读全文

博文 2018-07-12 13:30:46 apocelipes

《Go语言四十二章经》第六章 约定和惯例

《Go语言四十二章经》第六章 约定和惯例 作者:李骁 ## 6.1 可见性规则 包通过下面这个被编译器强制执行的规则来决定是否将自身的代码对象暴露给外部文件: 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 private )。 (大写字母可以使用任何 Unicode 编码的字符,比如希腊文,不仅仅是 ASCII 码中的大写字母)。 因此,在导入一个外部包后,能够且只能够访问该包中导出的对象。 假设在包 pa...阅读全文

博文 2018-09-24 19:55:44 roteman

第十二天:golang学习笔记之strings, text, unicode

★strings | strings包实现了用于操作字符的简单函数. ★text | scanner对utf-8文本的token扫描服务,tabwriter缩进修正 ★unicode | unicode 包提供了一些测试Unicode码点属性的数据和函数. 三个都和string有关,放一块康一康: string: strings包实现了用于操作字符的简单函数: 分割,按空格分割 比较(模糊相等、包含、包含任意字符) 计数 索引(首次、末次) 替换,首尾Trim 格式化(全小写,全大写,首字母大写) 字符串连接,构造重复字符串 遍历 定义个一个strings.Read结构体,实现了io.Reader text: text包含三个子包: scanner:scanner包提供了功能强大的scann...阅读全文

博文 2019-12-28 21:32:42 Macmillan_

Golang基础知识-概念篇

1、go中使用struct模拟类和对象 type Bike struct{ color string //首字母小写表示属性私有 Name string //首字母大些表示属性公有 } //首字母大些表示方法对外公开 func (b *Bike) Move() string{ return b.color } 2.三大基本特性 封装:首字母大小写代表公私有权限 继承:使用内嵌的方式,对结构体struct进行组合 多态:使用interface实现 3、五大基本原则 1、单一功能原则(struct) 2、开闭原则(扩展是开放,修改是关闭的) 3、里氏替换原则(子类可以替换父类,而程序逻辑不变) 4、接口隔离原则 5、依赖反转原则(对接口进行开发...阅读全文

golang标准库之strconv

字符串转整型 package main import ( "fmt" "strconv" ) func main() { //字符串转为整数 s := "128" // func ParseInt(s string, base int, bitSize int) (i int64, err error) // 返回字符串表示的整数值,接受正负号。 // base指定进制(2到36),如果base为0,则会从字符串前置判断,"0x"是16进制,"0"是8进制,否则是10进制; // bitSize指定结果必须能无溢出赋值的整数类型,0、8、16、32、64 分别代表 int、int8、int16、int32、int64; // 返回的err是*NumErr类型的,如果语法有误,err.Erro...阅读全文

博文 2019-10-04 15:32:45 aside section ._1OhGeD

encoding/json

在处理网络编程时, json格式的数据方便在网络上传输, 兼具可视化和效率... 虽然效率没有那么高... 但是确实使用的很广泛呀. 这个包用于处理golang的json相关的东西. 这个包在处理json问题时, 会用到反射获取字段的tag. 可以参考反射包... golang的官方文档~ https://blog.golang.org/json-and-go package main import ( "fmt" // "reflect" "encoding/json" ) type User struct{ // Name string `json:"-,"` // 这个导出才是 {"-":"张三","age":20} // Name string `json:"-"` // alway...阅读全文

博文 2019-04-16 20:34:46 个00个

Go冒泡排序练习

package main //要求:随机生成5个元素的数组,并使用冒泡排序对其排序 从小到大 //思路分析: //随机数用math/rand生成为了更好的保证其不会重复 使用 rand.New(rand.NewSource(time.Now().UnixNano()))并定义一个随机生成函数 //用冒泡排序对其排序 import ( //"math/rand" //"time" "fmt" "math/rand" "time" ) var arrnum [5]int = [5]int{109,137,49,190,87} //定义冒泡函数 //重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z) // 错误就把他们交换过来。走访元素的工作是重复地进...阅读全文

博文 2019-03-09 23:35:09 GoDevops

Golang学习笔记之包(package)

包是结构化代码的一种方式:每个程序都由包的概念组成,可以使用自身的包或者从其它包中导入内容。 一、工作空间 编译⼯具对源码目录有严格要求,每个⼯作空间 (workspace) 必须由 bin、 pkg、 src 三个目录组成。 二、包结构 所有代码都必须组织在 package 中。 • 包由同⼀目录下的多个源码⽂件组成。 • 包名类似 namespace,与包所在目录名、编译⽂件名⽆关。 • 目录名最好不⽤ main、 all、 std 这三个保留名称。 • 可执⾏⽂件必须包含 package main,⼊⼝函数 main。 包声明 "package + 包名" ,必须在源文件中非注释的第一行指明这个文件属于哪个包。如:package main。package main表示一个可独立执行的程...阅读全文

博文 2018-12-07 21:34:44 学生黄哲

2.蛤蟆笔记go语言——包

2.蛤蟆笔记go语言——包 每个 Go 程序都是由包组成的。 程序运行的入口是包 main。 这个程序使用并导入了包 "fmt" 和"math/rand"。 按照惯例,包名与导入路径的最后一个目录一致。例如,"math/rand" 包由 package rand 语句开始 代码 package main import ( "fmt" "math/rand" ) func main() { fmt.Println("Myfavorite number is", rand.Intn(10)) } 执行如下: Myfavorite number is 1 导入 代码用圆括号组合了导入,这是“打包”导入语句。 同样可以编写多个导入语句,例如: import "fmt" import "math" 不...阅读全文

博文 2016-09-07 10:00:44 notbaron

golang基础--method方法

Go没有类似python语言中类class的概念,但依旧有method 类型方法定义格式如下 func (a mytype) method_name(x type)(y type){ return y } 调用方式: instance.method(args) -> (type).func(instance, args) 通过显示的说明Receiver(强制函数传递的第一个参数)来实现与某个类型(struct,int...)的组合 package main import "fmt" type A struct{ Name Sting } func main() { a := A{} //实例化结构体 a.Method_Print() //结构体调用方法 } func (a A) Method...阅读全文

博文 2018-07-15 12:30:00 failymao

Go 面向对象编程(译)

『就要学习 Go 语言』系列 -- 第 26 篇分享好文 今天接着给大家分享关于 Go 面向对象的好文。原文作者是 William Kennedy,《Go 语言实战》作者,博客 www.ardanlabs.com/blog/ 的维护者。大部分中国的 Gopher 都是通过这个博客认识了这位 Go 大神。 有些与知识点无关的语句,翻译过来有点拗口,大家一眼带过。但与知识点相关的,都会尽量忠于原文。另外,文章做了简单的排版,方便阅读。翻译水平有限,有误的地方,请大家在下方留言指正。 基础 今天有人在论坛上问我一个问题,如何在不通过嵌入的情况下而获得继承的优点。重要的是,每个人都应该考虑 Go 语言,而不是他们留下的语言。我不能告诉你我从早期的 Go 实现中删除了多少代码,因为这是不必要的。语言设...阅读全文

博文 2019-06-17 11:34:25 Seekload

掌握这些Go语言特性,你的水平将提高N个档次(二)

前言: 大家好,我是asong,这是我的第二篇原创文章。上一文介绍了切片、变量声明、defer三个知识点(回顾上文,关注公众号即可进行阅读),这一文将继续介绍其他Go语言特性,废话不多说,直接上干货。 1. 指针和引用 在Go语言中只有一种参数传递的规则,那就是值拷贝,其包含两种含义: 函数参数传递时使用的值拷贝 实例赋值给接口变量,接口对实例的引用是值拷贝 我们在使用过程中会发现有时明明是值拷贝的地方,结果却修改了变量的内容,有以下两种情况: 直接传递的是指针。指针传递同样是值拷贝,但指针和指针副本的值指向的地址是同一个地方,所以能修改实参 参数是复合数据类型,这些符合数据类型内部有指针类型的元素,此时参数的值拷贝并不影响指针的指向。 在Go语言中,复合类型chan、map、slice、i...阅读全文

博文 2020-05-26 17:33:03 sunsong1997

Golang高性能json包:easyjson

简介easyjson是什么呢? 根据官网介绍,easyjson是提供高效快速且易用的结构体structs<-->json转换包。easyjson并没有使用反射方式实现,所以性能比其他的json包该4-5倍,比golang 自带的json包快2-3倍。 easyjson目标是维持生成去代码简单,以致于它可以轻松地进行优化或固定。安装go get -u github.com/mailru/easyjson/go install github.com/mailru/easyjson/easyjsonorgo build -o easyjson github.com/mailru/easyjson/easyjson验证是否安装成功。$ easyjson Usage of D:\Code\go\bin...阅读全文

博文 2018-07-02 12:20:21 梦朝思夕

Golang备忘 - 02 杂项:面向对象,通道

开发十年,就只剩下这套Java开发体系了 >>> 面向对象 OO语言最重要的三方面分别是:封装、继承和多态,在Go中它们如何体现: 封装:即数据隐藏,与别的OO语言有4个或更多访问层次相比,Go简化为2层: 包范围内的:通过标识符首字母小写,对象只能在它所在的包内可见 可导出的:通过标识符首字母大写,对象对所在包以外也可见 继承:用组合实现,内嵌一个或多个包含想要的行为(字段和方法)的类型; 多重继承可以通过内嵌多个类型实现 多态:用接口实现,某些类型的实例可以赋给它所实现的任意接口类型的变量。 类型和接口是松耦合的,并且多重继承可以通过实现多个接口实现 备注:类型只拥有自己所在包中定义的方法 通道(channel) 把一个进程中的两个goroutine比作汽车工作里的两个生产车间, 每个车...阅读全文

博文 2018-09-23 01:33:04 nnealguo

Golang实现统计文件内容的字符,数字,符号数量

废话不多说,直入主题 今天学习了通过Golang语言实现了统计文件内容中的字符,空格,数字,符号的数量, 当然也可以用来统计更多,例如:统计汉字,大写/小写字母等...仅需要更改部分代码即可. 知识点总结 代码实现前的思路分析: 打开一个文件,创建一个reader 每读取一行,就去统计该行有多少个字符,数字,空格等数量 然后将统计的数量储存到一个结构体内 引入的包有:bufio, io,os,fmt 源代码参考 package main import ( "bufio" "fmt" "io" "os" ) /* 代码编写思路: 1- 打开一个文件,创建一个reader 2- 每读取一行,就去统计该行有多少个字符,数字,空格等数量 3 - 然后将结果存到一个结构体内 */ // 定义一个结构体...阅读全文

博文 2019-10-13 00:32:52 aside section ._1OhGeD

Go语言之旅:包

每个 Go 程序都是由一些包组成的。 原文地址:https://golang-book.readthedocs.io 欢迎关注我们的公众号:小菜学编程 (coding-fan) 程序从 main 包开始执行。 package main import ( "fmt" "math/rand" ) func main() { fmt.Println("My favorite number is", rand.Intn(10)) } 在这个程序,通过 import 导入两个包, fmt 和 math/rand (包路径)。 按照惯例,包名与包路径最后部分相同。 例如, math/rand 包中的源码文件都以 package rand 语句开头。 import语句 Go 通过 import 语句引入包...阅读全文

博文 2018-08-11 15:35:18 fasionchan

golang-练习3

题目:将输入的字母变成其下一个字母,并且元音字母大写 package main import "fmt" func LetterChanges(str string) string { bb := []rune(str) var str1 []rune for i:=0;i='a'&&bb[i]<='z'){ str1=append(str1,bb[i]+1) c:=str1[i] if (c == 'a'|| c == 'e' || c == 'u' || c== 'i' || c == 'o') { str1[i]=str1[i]-32 } } else { str1=append(str1,bb[i]) } } str=string(st...阅读全文

博文 2017-11-13 16:00:00 peterinblog

Go语言核心之美 1.1-命名篇

命名篇 1.Go的函数、变量、常量、自定义类型、包(Package)的命名方式遵循以下规则: 1)首字符可以是任意的Unicode字符或者下划线 2)剩余字符可以是Unicode字符、下划线、数字 3)字符长度不限 2.Go只有25个关键字 break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var 3.Go还有37个保留字 Constants:true false iota nil Types: int int8 int16 int32 int6...阅读全文

博文 2017-10-27 20:57:37 erlib

2.蛤蟆笔记go语言——包

2.蛤蟆笔记go语言——包 每个 Go 程序都是由包组成的。 程序运行的入口是包 main。 这个程序使用并导入了包 "fmt" 和"math/rand"。 按照惯例,包名与导入路径的最后一个目录一致。例如,"math/rand" 包由 package rand 语句开始 代码 package main import ( "fmt" "math/rand" ) func main() { fmt.Println("Myfavorite number is", rand.Intn(10)) } 执行如下: Myfavorite number is 1 导入 代码用圆括号组合了导入,这是“打包”导入语句。 同样可以编写多个导入语句,例如: import "fmt" import "math" 不...阅读全文

博文 2016-09-07 10:00:02 notbaron

【Go语言】【15】GO语言的面向对象

GO是不是面向对象的语言?GO作者如是说:“是,也不是。”正如前面所说:GO是一种面向类型的语言,它有类型和方法,但没有类的概念,程序员可以用一种面向对象的风格(或者说是方式)来编程,下面我们从封装性、继承性和多态性三大面向对象的特性谈谈GO语言1、封装性 面向对象的语言中,“类”是基本单位,它把属性、方法局限在“类”中,并对外提供公共方法让使用者操作对象。当然这一过程离不开修饰符:public、protected、private等。 GO语言如何实现封装性呢?它是通过结构体(struct)和为类型添加方法的方式实现的。 例如,封装一个矩形(Rect)类,试想调用者会对矩形类做什么操作呢?无非就是看看它的面积、周长之类的信息,那么按照面向对象的编程思想来说,只要向使用者暴露getArea()...阅读全文

博文 2017-02-09 16:00:01 qingkechina

Go语言入门【三】:通过一段代码学Go语法

写在前面 Golang的语法足够简单,但变化很多,刚接触只需要掌握典型的用法即可,不需要知道所有的语法糖,所以代码中并不会包含所有可能的语法形式。 并发是Golang的一大主题,后续有专门的一节,并不出现在这一节。 还有一些『约定』: 可见性。Java中有private,protect,public。Golang默认采用首字母大小写来判断:首字母大写的变量、方法为public,所有范围内可见;首字母小写的为private,本文件内可见。 简洁性。import引入的包以及定义的变量必须被使用,否则程序编译不通过。因此,代码var p ClassA不是一个声明定义,而是包含了初始化,实际上内存已经被分配了,这一点很容易忽视。 下面上代码: //一段普通的Go语言代码,用于go语言学习,作者知米无...阅读全文

博文 2017-03-05 19:36:59 知米丶无忌