- 博客(29)
- 收藏
- 关注
原创 golang-利用反射访问/修改结构体的非导出字段
在golang中定义结构体时,如果字段名的首字母大写,那么这个字段就是可导出的,即可以在包外访问并修改的,而如果字段名的首字母小写,这个字段就是不可导出的。但其实,通过golang提供的反射,我们是可以在包外访问并操作到结构体中的非导出字段的。...
2020-09-13 16:44:36 2816
原创 golang-for range的坑
golang中,常用的遍历方式有经典的for循环和for range两种。实际上,使用 for range 语法的控制结构最终应该也会被golang的编译器转换成普通的 for 循环,所以for range实际上会被先转换成经典的for循环再真正执行,而正是这个转换过程常常会留坑。下面简单表示这个转换过程:for range代码是:for index, value := range t_slice { original body}转换后:len_temp := len(t_slice)ra
2020-08-08 17:25:55 3392 1
原创 golang-短变量覆盖case
常见的情形就是:在if条件语句块或for循环语句块中,使用“:=”给一个与外部同名的变量赋值直接看个例子:package mainimport "fmt"func returnSomething() (int, bool) { return 0, true}func main() { var errOrNot = false a := 1 if a > 0 { // var res int res, errOrNot := returnSomething() f
2020-07-25 16:10:34 414
原创 golang-性能测试的同时进行性能分析
性能测试使用benchmark,性能分析使用pprof,二者可以同时进行。示例代码:package benchmarktestimport ( "strings" "testing")func BenchmarkConcatStringByAdd(b *testing.B) { elems := []string{"1", "2", "3", "4", "5"} b.ResetTimer() for i := 0; i < b.N; i++ { res := "" fo
2020-07-25 12:32:56 239
原创 golang-使用pprof进行性能分析
pprof是golang自带的性能分析工具,在程序运行过程中,可以记录程序的运行信息,像CPU使用情况、内存使用情况、协程的情况等等。pprof主要有两种使用方式:通过文件方式输出Profilehttp通过文件方式输出profile下面给出一个简单的示例程序(例子摘自网上):package mainimport ( "log" "math/rand" "os" "runtime/pprof" "time") const ( row = 10
2020-07-25 00:58:30 1969 1
原创 golang-写一个简单的性能测试
golang中,可以使用自带的benchmark来进行性能测试。写法与单元测试很类似:文件名仍以xxx_test.go来命名,函数以Benchmark为前缀名,并且带有一个testing.B类型的参数。实例:func BenchmarkXXX(b *testing.B) { // 与性能测试无关的代码 b.ResetTimer() for i:=0;i<b.N;i++ { //测试代码 } b.StopTimer() // 与性能测试无关的代码}具体的测试代码就放在循环里。
2020-07-24 17:12:59 651
原创 golang-写一个简单的单元测试
golang中的单元测试主要使用golang的内建测试指令go test和testing包来实现。#先编写一个简单的待测试文件functions.go,主要包含两个待测试的功能函数square和addOne
2020-07-24 16:12:48 717
原创 golang-不固定格式的json
当json字符串没有固定格式时,反序列化不好定义与其相对应的结构体,此时应使用json.RawMessage将原始字节数据保存下来,再做进一步解析。json.RawMessage其实是[]byte的别名。如:package mainimport ( "encoding/json" "fmt")type Student struct { Name string `json:"name"` Age int `json:"age,string"`}func main() {
2020-06-27 10:44:49 2660
原创 golang-自定义json序列化和反序列化
为某个类型实现MarshalJSON()([]byte, error)和UnmarshalJSON(b []byte) error方法,那么该类型在序列化和反序列化时就会使用相应方法。未自定义前代码:package mainimport ( "encoding/json" "fmt" "time")type Student struct { Name string `json:"name"` Age int `json:"age"` We
2020-06-24 17:43:53 2827
原创 golang-json中的数字
json中的数字类型问题JSON 协议中没有整型和浮点型之分,都是number。Go中json字符串中的数字经过json包反序列化会成为float64类型。如:package mainimport ( "encoding/json" "fmt")type Student struct { Name string `json:"name"` Age interface{} `json:"age"` Weight float64 `json:"weight"`
2020-06-24 16:33:00 2562
原创 golang-json使用(json tag)
结构体的tagtag是结构体的元信息,运行时通过反射机制读取。结构体的tag一般定义在相应字段的后面,格式为:fieldName fieldType `key1:"value1" key2:"value2"同一个结构体字段可以设置多个键值对tag,不同的键值对之间使用空格分隔。json tag默认情况下序列化与反序列化使用的都是结构体的原生字段名,可以通过给结构体字段添加json tag来指定序列化后的字段名。例如代码:package mainimport ( "fmt" "enc
2020-06-23 17:32:05 3581 1
原创 golang-json基础使用
golang中直接导入“encoding/json”包即可使用json.普通结构体的序列化与反序列化主要是json.Marshal与json.Unmarshal两个函数的使用。func Marshal(v interface{}) ([]byte, error)func Unmarshal(data []byte, v interface{}) error这里示例代码及输出为:package mainimport ( "fmt" "encoding/json")type Stud
2020-06-23 15:44:27 215
原创 golang-使用自定义的包(不使用包管理工具)
golang中怎样在不使用其它包管理工具时使用自己定义的包呢,这里举一个简单的例子。在 GOPATH/src 下新建文件夹hello执行时golang会在GOPATH/src/和GOROOT/src/下寻找代码中引入的包,所以一般在GOPATH/src下自定义包在hello中新建文件夹func,在func下编写func.go://自定义包func作为被调用包package func//Add函数是被调用工具函数func Add(a, b int) int { return a + b
2020-06-22 17:37:20 694
转载 ngx_http_request_t结构体
收藏学习................................................................................................
2017-04-19 10:47:34 1376
原创 ubuntu下安装nginx时PCRE库、zlib库、OpenSSL库的安装
Nginx个人学习备忘............................................................
2017-04-09 14:35:17 25081 4
转载 数据结构
本部分总结前面介绍的数据结构和算法,并讨论在不同的情况下如何进行选择。通用数据结构:数组、链表、树、哈希表专用数据结构:栈、队列、优先级队列排序:插入排序、希尔排序、快速排序、归并排序、堆排序图:邻接矩阵、邻接表外部存储:顺序存储、索引文件、B-树、哈希方法
2016-08-03 01:00:49 431
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人