Go
Go
alpha_2017
这个作者很懒,什么都没留下…
展开
-
go遍历结构体(struct)字段对应的值,切片(slice),字典(map)
一、遍历结构体字段:eg1:package mainimport ( "fmt" "reflect")type person struct { name string age int}func main() { v := reflect.ValueOf(person{"steve", 30}) count := v.NumField() for i := 0; i < count; i++ { f := v.Fie转载 2021-08-01 00:49:01 · 1238 阅读 · 0 评论 -
Golang 接口切片存储多层嵌套Map对象,如何初始化,又如何直接读取嵌套层的key-value值
package mainimport (“fmt”“reflect”)func main() {//定义一个接口类型的切片in := make([]interface{}, 3)m1 := make(map[string]string)m2 := make(map[string][]byte)//初始化键值对m1 = map[string]string{“teleplay1”: “情定大饭店”,“teleplay2”: “天国的阶梯”,“teleplay3”: “爱在哈佛”转载 2021-08-01 00:45:26 · 1122 阅读 · 0 评论 -
go语言json嵌套数组结构体用法
文章目录前言1. RDB 文件持久化的优缺点2. RDB 的触发方式2.1 save 命令触发2.2 bgsave 命令触发2.3 定时任务触发2.4 主从同步全量复制触发3. RDB 的处理流程3.1 RDB 文件传输3.2 socket 无盘传输4. RDB 涉及的技术原理4.1 写时复制 Copy On Write4.2 diskless 无盘传输的管道读写前言Redis 是基于内存的 KV 数据库,使用时所有数据都在内存中,这就是它存取性能高的重要原因之一。但是如我们所原创 2021-08-01 00:41:47 · 1278 阅读 · 0 评论 -
go 中 = 与:= 区别
“=”的使用与其他语言相同,赋值操作,但是此处的变量必须提前声明好类型,或者在声明的同时赋值。“:=”的使用则类似于c++中的auto操作,自动匹配变量类型,省去了声明变量类型操作,也就是你可以不声明,在赋值使用的时候多加个冒号就可以了。package mainimport "fmt"func main(){ var a int a =10 fmt.Print(a)}结果如下:然后我们直接赋值试一试:package mainimport "fmt"func main(){ /原创 2021-04-05 14:04:46 · 752 阅读 · 0 评论 -
go - 构造复杂json串
例如在go中构造如下json串{"name":"alpha", "sex":"男", "age":18,"grade":{"gname":"wegame", "gdesc":"qq" } }在如下网址中输入以上json串可以自动生成对应的结构体https://mholt.github.io/json-to-go/type Autogenerated struct { Name string `json:"name"` Sex string原创 2021-04-05 03:25:51 · 871 阅读 · 0 评论 -
go -json 转map并判断是否存在
package mainimport ( "encoding/json" "fmt")//检查map里面是否存在某个key,返回字符串func mapExist(m map[string]interface{}, key string) string { if _, ok := m[key]; ok { return fmt.Sprintf("%v",m[key]) } else { return "" }}//解析json字符串成 mapfunc jsonStrin.原创 2021-04-04 23:54:27 · 798 阅读 · 0 评论 -
go - 发布订阅模型
// 3.5 发布订阅模型package mainimport ( "fmt" "strings" "sync" "time")type ( subscriber chan interface{} // 订阅者为一个通道 topicFunc func(v interface{}) bool // 主题为一个过滤器)// 发布者对象type Publisher struct { m sync.RWMutex //读原创 2021-04-04 23:32:12 · 163 阅读 · 0 评论 -
go -context
package mainimport ( "context" "fmt" "time")func main() { ctx, cancel1 := context.WithCancel(context.Background()) go func(ctx context.Context) { for { select { case v := <-ctx.Done(): fmt.Println("监控退出,停止了..., v: ", v, ", err:", c原创 2021-04-04 23:31:11 · 72 阅读 · 0 评论 -
go - struct
// 1.4 struct匿名成员(字段、属性)package mainimport "fmt"type Person struct { Name string Age int}type Student struct { score string Age int Person // 匿名内嵌结构体}func main() { var stu = new(Student) stu.Age = 22 //优先选择Stu原创 2021-04-04 23:30:03 · 74 阅读 · 0 评论 -
go - reflect
package mainimport ( "fmt" "reflect")func main() { str := "darren" val := reflect.ValueOf(str).Kind() fmt.Println(val) //string}原创 2021-04-04 23:28:37 · 80 阅读 · 0 评论 -
go - const
package mainimport ( "fmt" "time")const ( Man = 1 Female = 2)func main() { for { second := time.Now().Unix() if second%Female == 0 { fmt.Println("female") } else { fmt.Println("man") } time.Sleep(1000 * time.Millisecond) }原创 2021-04-04 23:27:13 · 92 阅读 · 0 评论 -
go -生成pb文件 -下
文件目录package mainimport ( "fmt" "github.com/golang/protobuf/proto" "test/mypro" //引入的proto的包 , go语言中,一个目录里面的所有文件都应设置成一个包)func main() { s1 := &mypro.Student{} //第一个学生信息 s1.Name = "jz01" s1.Age = 23 s1.Address = "cq"原创 2021-04-04 23:22:35 · 475 阅读 · 0 评论 -
go -生成pb文件 - 上
在使用 protoc 工具生成 go 代码的时候报出的如下错误:在syntax = “proto3”; //版本号版本中字段默认为syntax = “proto3”; //版本号protoc ./test.proto --go_out=./ WARNING: Missing 'go_package' option in "message.proto",please specify it with the full Go package path asa future release of pr原创 2021-04-04 03:16:25 · 1634 阅读 · 0 评论 -
go - str - byte
package mainimport ( "fmt" "strings" "unsafe" _ "unsafe")func test1() { bytes := []byte("I am byte array !") str := string(bytes) bytes[0] = 'i' //注意这一行,bytes在这里修改了数据,但是str打印出来的依然没变化, fmt.Println(str)}func test2() { bytes := []byte("I am by原创 2021-04-04 23:19:48 · 143 阅读 · 0 评论 -
go - range
package mainimport ( "fmt")func main() { str := "hello world,中国" for i, v := range str { fmt.Printf("index[%d] val[%c]\n", i, v) }}原创 2021-04-03 23:18:00 · 68 阅读 · 0 评论 -
go - random
package mainimport ( "fmt" "math/rand" "time")func init() { rand.Seed(time.Now().UnixNano())}func main() { for i := 0; i < 10; i++ { a := rand.Int() fmt.Println(a) } for i := 0; i < 10; i++ { a := rand.Intn(100) fmt.Println(a原创 2021-04-03 23:17:17 · 151 阅读 · 0 评论 -
go - pointer - ptr
package mainimport "fmt"func modify(p *int) { fmt.Println(p) *p = 1000900 return}func main() { var a int = 10 fmt.Println(&a) var p *int p = &a fmt.Println("the address of p:", &p) fmt.Println("the value of p:", p) fmt.Prin原创 2021-04-03 23:16:45 · 84 阅读 · 0 评论 -
go -func
package mainimport "fmt"func add(a, b int) int { return a + b}func test() { return}func main() { c := add sum := c(200, 300) fmt.Println(sum) str := "hello, world,中国" for index, val := range str { fmt.Printf("index[%d] val[%c] len[%d]原创 2021-04-03 23:16:14 · 85 阅读 · 0 评论 -
go -switch-fallthrough
package mainimport ( "fmt")func test_switch1() { a := 2 switch a { case 1: fmt.Println("a=1") case 2: fmt.Println("a=2") case 3: fmt.Println("a=3") case 4: fmt.Println("a=4") default: fmt.Println("default") }}func test_switch2()原创 2021-04-03 23:15:46 · 114 阅读 · 0 评论 -
go - const
package mainimport ( "fmt" "time")const ( Man = 1 Female = 2)func main() { for { second := time.Now().Unix() if second%Female == 0 { fmt.Println("female") } else { fmt.Println("man") } time.Sleep(1000 * time.Millisecond) }原创 2021-04-03 23:15:07 · 67 阅读 · 0 评论 -
go - interface
package main/**/import "fmt"//只要实现了speak方法的变量就是speak类型type speak interface { speak()}type cat struct {}type dog struct {}type person1 struct {}func (C cat) speak(){ fmt.Println("cat 抓人")}func (D dog) speak(){ fmt.Println("狗咬人")}func (P pe原创 2021-04-03 23:13:14 · 71 阅读 · 0 评论 -
go - json -struct
go - json -structgo - json -structgo - json -structgo - json -structgo - json -structgo - json -struct原创 2021-04-03 23:00:23 · 128 阅读 · 0 评论 -
go - slice
go - slicego - slicego - slicego - slice原创 2021-04-03 22:59:50 · 73 阅读 · 0 评论 -
go - map
go语言map原创 2021-04-03 22:59:19 · 94 阅读 · 0 评论 -
channel带缓冲区和不带缓冲区的区别
1.缓冲区大小不同不带缓冲区的chan的缓冲区大小是0,带缓冲区的chan缓冲区至少是1.2.运行方式不同不带缓冲区的chan线程写入时会立马发生阻塞,直到有其他线程有对该chan执行接收操作且接收成功后,写入的进程才会解除阻塞。不带缓冲区的chan线程接收时也会立马发生阻塞,直到有其他线程对该chan执行写入操作后,接收的线程才会解除阻塞。带缓冲区的chan执行线程执行写入时不带缓冲区func main() { ch:=make(chan int,0) go func(){ ti原创 2021-03-28 12:48:11 · 1388 阅读 · 0 评论 -
goland远程linux服务器开发
gogogogogogogogogogogogogogogogogogogogo原创 2021-03-22 22:53:27 · 1121 阅读 · 0 评论