日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Golang 一些基本功能使用记录

發布時間:2025/3/21 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Golang 一些基本功能使用记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

(TOC)

命令行參數

import "flag" func main() {ports := flag.String("ports", "10086", "list the port ....")var version_check boolflag.BoolVar(&version_check, "v", false, "version")flag.Parse()if version_check {do()}portsList := strings.Split(*ports, ",")if len(portsList) > 5 {fmt.Println("no more than 5 ports")return} }

配置文件

package main import ("fmt""github.com/BurntSushi/toml" ) type tomlConfig struct {Title stringMysql mysqlInfo } type mysqlInfo struct {Host stringPort intUser stringPasswd stringDb string } func main() {var config tomlConfigif _, err := toml.DecodeFile("config.toml", &config); err != nil {fmt.Println(err)return}fmt.Println(config.Title)fmt.Println(config.Mysql.Host) }

配置文件如下,需要名稱和tomlconfig中的相同,并且代碼中首字母大寫,配置中小寫

Title = "test" [mysql] host = "11.22.33.44" port = 3306 user = "smart" passwd = "smart" db = "smart"

MySQL

package main import ("database/sql""fmt"_ "github.com/go-sql-driver/mysql" ) func fetchdata() {db, err := sql.Open("mysql", "user:passwd@tcp(host:port)/database")if err != nil {fmt.Println(err)}err = db.Ping()if err != nil {fmt.Println(err)}rows, err := db.Query("select * from table")if err != nil {fmt.Println(err)}for rows.Next() {var counts stringvar indexs intif err := rows.Scan(&counts, &indexs); err != nil {fmt.Println(err)}fmt.Println(counts, indexs)}defer db.Close() } func main() {fetchdata() }

Socket

func udpReceiver(port string) {defer workExitLock.Done()var addr *net.UDPAddrvar server *net.UDPConnvar err errorif addr, err = net.ResolveUDPAddr("udp", port); err != nil {Error.Printf("Udp listener error: %s", err)return}if server, err = net.ListenUDP("udp", addr); err != nil {Error.Printf("Udp listener error: %s", err)return}if err = server.SetReadBuffer(UDP_READ_BUFF); err != nil {Error.Printf("Udp listener error: %s", err)return}Info.Printf("Listen Udp Sucessfully, port: %s", port)var buf []bytefor {if len(buf) < UDP_PACK_SIZE {buf = make([]byte, PACK_BUF_SIZE, PACK_BUF_SIZE)}nbytes, addr, err := server.ReadFromUDP(buf)if err != nil {Error.Printf("Receive udp data error: %s", err)continue}msg := buf[:nbytes]buf = buf[nbytes:]udpChan <- UdpMessage{addr, msg}} }// 可選udp或者tcp func netSender(typename string, addr string, retry int) {for {conn, err := net.Dial(typename, addr)if err != nil {Error.Printf("make conn error: ", err)time.Sleep(time.Duration(retry) * time.Second)continue}for one := range resChan {_, err = conn.Write([]byte(one))if err != nil {Error.Printf("send data error: %s", err)conn.Close()break}}} }

在實驗環境中,如果對端沒有處理指定端口的數據,會每隔一秒種返回一個ICMP包提示 udp port distinct unreachable 此時發送程序會有對應的發送失敗提示,也是每秒鐘一個

log

package main import ("config""io""log""os" ) var (Info *log.LoggerError *log.Logger ) func Init(infoHandle io.Writer,errorHandle io.Writer) {Info = log.New(infoHandle,"INFO: ",log.Ldate|log.Ltime|log.Lshortfile)Error = log.New(errorHandle,"ERROR: ",log.Ldate|log.Ltime|log.Lshortfile) } func logInit(conf config.ProcessInfo) {pinfo := conf.Logdir + "/" + "log.info"perro := conf.Logdir + "/" + "log.err"finfo, err := os.OpenFile(pinfo, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)if err != nil {log.Fatalf("file open error : %v", err)}ferro, err := os.OpenFile(perro, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)if err != nil {log.Fatalf("file open error : %v", err)}Init(finfo, ferro) }func main() {gomaxprocs := runtime.NumCPU() - 1runtime.GOMAXPROCS(gomaxprocs)Info.Printf("Program start. GOMAXPROCS: %d", gomaxprocs) }

同步統計

使用sync/atomic,利用其實現的函數可以達到無沖突的統計

import "sync/atomic" type count64 uint64 func (c *count64) increment(incr int) count64 {return count64(atomic.AddUint64((*uint64)(c), uint64(incr))) } func (c *count64) get() count64 {return count64(atomic.LoadUint64((*uint64)(c))) }

其他

要注意golang特有的一些格式要求,比如:

  • 不能有沒用的變量,沒用到的import
  • 對外提供的函數,首字母必須大寫,否則不能被其他package使用。同一個package不同文件的函數和全局變量直接使用
  • 盡量少使用異常,通過返回err進行判斷和處理,panic在嚴重時才使用
  • 轉載于:https://my.oschina.net/xcxt/blog/1559112

    總結

    以上是生活随笔為你收集整理的Golang 一些基本功能使用记录的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 老汉av | 法国空姐在线观看完整版 | 精品一区二区三区在线观看视频 | 美女av网址 | 一级aaaa毛片| 亚洲丁香婷婷 | 国产麻豆免费视频 | 国产a免费观看 | 日日夜夜亚洲 | 欧美一区二区三区激情 | 91精品久久久久久久久久入口 | 天天色综合图片 | 国产精品一区二区三区在线免费观看 | 91tv在线观看| 久久亚洲AV无码 | 9久精品 | 亚洲97| 久久久网 | 国产精品一级二级 | 好吊操av | 一区二区在线观看免费视频 | 色老头一区二区三区 | 日韩毛片网站 | 狠狠干影院| 朋友的姐姐2在线观看 | 黑人巨大精品欧美一区免费视频 | 欧美夜夜夜| 色婷婷av777 麻豆传媒网站 | 成人精品视频一区二区三区尤物 | 免费看黄色大片 | 婷婷黄色网 | 女的被男的操 | 亚洲欧洲另类 | 69国产精品视频 | 色噜噜狠狠狠综合曰曰曰 | 日韩无码精品一区二区三区 | 曰批视频在线观看 | 免费播放毛片 | 啪视频在线 | 色七七亚洲 | 亚洲午夜天堂 | 综合在线亚洲 | 91一级视频 | 欧美日韩在线国产 | 久久久久综合网 | 国产五区 | 黑人巨大精品欧美一区二区蜜桃 | 深爱综合网 | 婷婷色影院 | 国产小视频免费 | 337p粉嫩色噜噜噜大肥臀 | 91在线精品秘密一区二区 | 丰满熟女人妻一区二区三区 | 日本aa视频| 狠狠插综合 | 国产一级片网站 | 大地资源二中文在线影视免费观看 | 久久久久久久久久久久久久久久久久久 | 久久嫩草精品久久久久 | 一个人在线免费观看www | 91在线看黄| 全部免费毛片在线播放一个 | aaaa级片 | 九九热av| 成人一区二区在线观看 | 在线看国产视频 | 亚洲网站一区 | a级片免费视频 | 久久成人国产精品 | 国产色av| www.亚洲天堂.com | 呦呦网 | 免费在线观看的黄色网址 | 国产福利在线观看视频 | 国产伦乱 | 四月婷婷 | 狠狠操欧美 | 理想之城连续剧40集免费播放 | 亚洲精品久久久久久国产精华液 | 免费黄色一区二区 | jizz免费在线观看 | av老司机在线播放 | 国内精品偷拍视频 | 一级做a免费 | 久久青青草原亚洲av无码麻豆 | 国产欧美亚洲一区 | 91在线公开视频 | 成人片在线免费看 | 亚洲精品无 | 国产精品日韩电影 | 亚洲人成7777 | 天堂色av| 国产丰满农村老妇女乱 | 色婷婷综合成人av | 四虎新网址 | 99热这里只有精品4 精品国产黄色 | 国产av无码专区亚洲a∨毛片 | 久久艹中文字幕 | 欧美一区二区三区影视 |