美文网首页
第一次写go,看看我都写了啥

第一次写go,看看我都写了啥

作者: 卖火柴的wxx | 来源:发表于2019-08-14 15:27 被阅读0次

说来丢人,本人第一次写go,写的歪歪扭扭。在此之前,总是到处看到go的大名。感觉go是各种语言混杂,既有js那样定义变量var,const,又有c和c++的指针,解引用和结构体。本智障学艺不精,只是很表面的看法哈哈...网上查了下它的好处,我来瞎说一下是快(相对于Python), 简单(相对于c/c++)...同步并发啥的还没感受到。这里贴一下我用GO连AWS elasticache的redis的code,作为保存。

package main

import (
    "fmt"
    _ "strings"
    _ "time"

    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/awserr"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/elasticache"
)
var servicePortMap map[string]string

func NewConfig() (*elasticache.ElastiCache) {
    sess, _ := session.NewSessionWithOptions(session.Options{
        Profile: "YOUR-LOCAL-PROFILE-HERE",
    })
    svc := elasticache.New(sess, &aws.Config{
        Region: aws.String("us-west-2"),
    })
    return svc
}

func GetReplicaGroup() {
    svc := NewConfig()
    input := &elasticache.DescribeReplicationGroupsInput{
        //ReplicationGroupId: aws.String("staging-chat-service"),
    }
    result, err := svc.DescribeReplicationGroups(input)
    if err != nil {
        if aerr, ok := err.(awserr.Error); ok {
            switch aerr.Code() {
            case elasticache.ErrCodeReplicationGroupNotFoundFault:
                fmt.Println(elasticache.ErrCodeReplicationGroupNotFoundFault, aerr.Error())
            case elasticache.ErrCodeInvalidParameterValueException:
                fmt.Println(elasticache.ErrCodeInvalidParameterValueException, aerr.Error())
            case elasticache.ErrCodeInvalidParameterCombinationException:
                fmt.Println(elasticache.ErrCodeInvalidParameterCombinationException, aerr.Error())
            default:
                fmt.Println(aerr.Error())
            }
        } else {
            fmt.Println(err.Error())
        }
        return
    }

    fmt.Println(result.ReplicationGroups[0].ReplicationGroupId)
    for i := range result.ReplicationGroups {
        item := result.ReplicationGroups[i]
        if item.ConfigurationEndpoint != nil{ //clustered
            configurationEndpoint := fmt.Sprint(*item.ConfigurationEndpoint.Address, ":", *item.ConfigurationEndpoint.Port)
            servicePortMap[*item.ReplicationGroupId] = configurationEndpoint
        } else if item.NodeGroups[0].PrimaryEndpoint != nil {
            primaryEndPort := fmt.Sprint(*item.NodeGroups[0].PrimaryEndpoint.Address, ":", *item.NodeGroups[0].PrimaryEndpoint.Port)
            servicePortMap[*item.ReplicationGroupId] = primaryEndPort
        }
    }
}

func GetCacheClusters() {
    svc := NewConfig()
    input := &elasticache.DescribeCacheClustersInput{
        ShowCacheNodeInfo: aws.Bool(true),
        ShowCacheClustersNotInReplicationGroups: aws.Bool(true),
    }

    result, err := svc.DescribeCacheClusters(input)
    if err != nil {
        if aerr, ok := err.(awserr.Error); ok {
            switch aerr.Code() {
            case elasticache.ErrCodeCacheClusterNotFoundFault:
                fmt.Println(elasticache.ErrCodeCacheClusterNotFoundFault, aerr.Error())
            case elasticache.ErrCodeInvalidParameterValueException:
                fmt.Println(elasticache.ErrCodeInvalidParameterValueException, aerr.Error())
            case elasticache.ErrCodeInvalidParameterCombinationException:
                fmt.Println(elasticache.ErrCodeInvalidParameterCombinationException, aerr.Error())
            default:
                fmt.Println(aerr.Error())
            }
        } else {
            fmt.Println(err.Error())
        }
        return
    }

    for i := range result.CacheClusters {
        item := result.CacheClusters[i]
        if *item.Engine == "redis" { //else memcached; ignore it
           servicePortMap[*item.CacheClusterId] = *item.CacheClusterId
        }
    }
}

func main(){
    servicePortMap = make(map[string]string)
    GetReplicaGroup()
    GetCacheClusters()
    fmt.Println(servicePortMap)
}

哈哈这就是第一次写GO写了一晚上的内容,AWS-SDK的api文档写的挺详细。遇到的几个小坑或者说要优化的地方:

  1. TODO:用paginator写,可以把所有的都拿到,现在的api比如DescribeCacheClusters,有上限可以拿到100.
  2. AWS elasticache redis 我把它分成三种,single node/redis/clustered redis. 前两个其实官方文档都是redis(cluster mode disabled) 但是拿endpoint要用不同的api。来个图 显得我很专业的样子哈哈


    偷图.jpg
    大概是这样.jpg

    以上就是我一晚上的感悟总结,要是用boto3,分分钟就写完了,看起来go适合c/c++写的比较熟的人。写文章能不能涨粉丝呀,要是有粉丝我改天再写个k8s的嘻嘻。

相关文章

  • 第一次写go,看看我都写了啥

    说来丢人,本人第一次写go,写的歪歪扭扭。在此之前,总是到处看到go的大名。感觉go是各种语言混杂,既有js那样定...

  • 坚持打卡第十八天——总结一下

      其实今天不知道学点啥,不知道写点啥,也确实有点不太想写。但是,看前面都坚持写了十七天了,必须要写点啥。  看了...

  • 无药可救了

    第一次写…… 可能以后啥都写,也可能啥都写不出来。 今晚直播让我想写点啥。从来没写过文, 也写不出来啥。 就图一乐...

  • 你都写了些啥

    你都写了些啥 一天天的敲啊敲的 写不出来还使劲写 使劲写字字会变形 看看那变形的字 言不成词,词不成句,句不成段,...

  • 第一篇

    不知道写啥,所以啥也不写了。

  • 半天时间 Go 语言的基本实践

    上班两个月,写了 C++,写了 Pathon,最近又要开始写 Go,唯独没有用我最擅长的 Java。。。 Go 开...

  • 写作没灵感怎么办?

    写了25遍文章后感觉写不下去了,不知道写啥,第一次这么郁闷。 脑袋空空,创作的脑细胞都休眠了,平时我喜欢在坐公交的...

  • 宿醉

    写在连载之前: 啥玩意儿连载不连载,有人看我写,没人看我也写,第三人称看自己,能写完了露出姨母笑,别捶胸顿足要死要...

  • 躲避的爱5

    大年初一,起来后,你说要看我写的关于和你的文章。你说,你也写了,互换。 你发了过来,我一看: 第一次在直播间里,当...

  • 15/70 成功才是成功之母

    每次写作业都会去看看我的同桌小伙伴写的啥?今天也不例外,她既然两天都在写,写了十几天不知道写什么了! 瞬间感觉自己...

网友评论

      本文标题:第一次写go,看看我都写了啥

      本文链接:https://www.haomeiwen.com/subject/ueigjctx.html