20200710のGoに関する記事は3件です。

Azure Functions for Goの歴史

Azure Functionsは、関数単位で処理を実行するAzureサービスです。

2020年6月現在、Azure Functionsは

  • C#, JavaScript, F#, Java, PowerShell, Python, TypeScript

を正式サポートしてしますが、残念ながらココにGoはありません。

Azure/azure-sdk-for-goにAzure Functions for Goに関するイシューがあります。

このイシューを読み進めると、Azure Functions for Goの歴史を垣間見ることができます。

2017年12月、当初、Private Preview版への招待が開始されました。

2018年頃は、開発が停滞したり再開したりしました。

2019年10月、開発担当者がマイクロソフト社を辞められていました。

2019年12月、別の実装方法が模索されることになりました。

2020年5月、その答えが「Azure Functions custom handlers」でした。

私もリアルタイムにその流れを目撃していたのですが、azure.microsoft.comに一瞬ブログ記事が掲載されたのですが、すぐに取り消されてしまいました。

現在「Azure Functions custom handlers」はPublic Previewであり、正式リリースされた暁には、公式サイトにも再度アナウンス記事が掲載されることでしょう。

Goなサンプル

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

SonarqubeのGolang対応

https://qiita.com/fake-deli-ca/items/dd21a5b86b5dfdd7cb0a

元々上記でなんでSonarqubeのVerUp対応をしたかというと、golang対応が6.4では対応していないからである。
https://docs.sonarqube.org/latest/analysis/languages/go/

というわけで対応。sonar-scannerは元々対応済み前提。

sonar.properties
##################################################################
# Properties file for sonar-scanner
# See https://docs.sonarqube.org/display/SONAR/Analysis+Parameters
##################################################################

# Server
sonar.host.url=https://sonarqube.foo.jp/

# Required metadata
#FIXME ここから
sonar.projectKey=golang
sonar.projectName=golang Project
sonar.projectVersion=0.0.1

sonar.sources=.
sonar.exclusions=**/*_test.go,**/vendor/**

sonar.tests=.
sonar.test.inclusions=**/*_test.go
sonar.test.exclusions=**/vendor/**
#FIXME ここまで
sonar.sourceEncoding=UTF-8
# sonar.language=py
sonar.go.coverage.reportPaths=reports/coverage.out
sonar.go.tests.reportPaths=reports/test.json

こんな感じのpropertiesファイルを作成して

.PHONY: test
test:
    go test ./... -coverprofile=reports/coverage.out -json > reports/test.json

test時にこんな感じで出力すればOK

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

GoでOpenWeatherMapAPI叩いてみた

前提

もくもく会で作成したOpenWeatherMapのAPIをGoから叩いてみたものです。
とりあえず、GoからAPIを叩くというのをやりたかったので、エラー処理を考慮していませんのでご承知おきください。

環境

OS:maOS Catalina 10.15.5
Go:go version go1.14.4 darwin/amd64

つくったもの

ソースはこちら

main.go
package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "os"
    "strconv"
)

type WeatherData struct {
    Coord struct {
        Lon float64 `json:"lon"`
        Lat float64 `json:"lat"`
    } `json:"coord"`
    Weather []struct {
        ID          int    `json:"id"`
        Main        string `json:"main"`
        Description string `json:"description"`
        Icon        string `json:"icon"`
    } `json:"weather"`
    Base string `json:"base"`
    Main struct {
        Temp      float64 `json:"temp"`
        FeelsLike float64 `json:"feels_like"`
        TempMin   float64 `json:"temp_min"`
        TempMax   float64 `json:"temp_max"`
        Pressure  int     `json:"pressure"`
        Humidity  int     `json:"humidity"`
    } `json:"main"`
    Wind struct {
        Speed float64 `json:"speed"`
        Deg   float64 `json:"deg"`
    } `json:"wind"`
    Clouds struct {
        All int `json:"all"`
    } `json:"clouds"`
    Dt  int `json:"dt"`
    Sys struct {
        Type    int     `json:"type"`
        ID      int     `json:"id"`
        Message float64 `json:"message"`
        Country string  `json:"country"`
        Sunrise int     `json:"sunrise"`
        Sunset  int     `json:"sunset"`
    } `json:"sys"`
    Timezone int    `json:"timezone"`
    ID       int    `json:"id"`
    Name     string `json:"name"`
    Cod      int    `json:"cod"`
}

func main() {
    url := "https://api.openweathermap.org/data/2.5/weather?id=1850144&appid=" + os.Getenv("OPEN_WEATHER_API_KEY")

    res, _ := http.Get(url)

    // レスポンスを取得
    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    var data WeatherData

    // 返却されたJSONをパース
    if err := json.Unmarshal(body, &data); err != nil {
        log.Fatal(err)
    }

    // 取得したものを出力(一部)
    fmt.Println("Main:" + data.Weather[0].Main)
    fmt.Println("Description:" + data.Weather[0].Description)
    fmt.Println("Temp:" + strconv.FormatFloat(data.Main.Temp, 'f', 4, 64))
    fmt.Println("TempMax:" + strconv.FormatFloat(data.Main.TempMax, 'f', 4, 64))
    fmt.Println("TempMin:" + strconv.FormatFloat(data.Main.TempMin, 'f', 4, 64))
    fmt.Println("Humidity:" + strconv.Itoa(data.Main.Humidity))
    fmt.Println("Humidity:" + strconv.Itoa(data.Main.Pressure))
}

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む