Go語言學習筆記-1

来源:https://www.cnblogs.com/WenTesla/archive/2023/01/15/17053977.html
-Advertisement-
Play Games

Go語言上手(一) 這是我參與「第五屆青訓營 -後端場」筆記創作活動的的第一篇筆記。 先上代碼倉庫: WenTesla/GoLang-Study: 一個學習Go的倉庫 (github.com) 這個倉庫下放下我目前學習GO的所有筆記以及代碼,還未整理,最後會將倉庫進行整理。 基礎語法 一:類型 GO ...


Go語言上手(一) 

這是我參與「第五屆青訓營 -後端場」筆記創作活動的的第一篇筆記。

先上代碼倉庫:

WenTesla/GoLang-Study: 一個學習Go的倉庫 (github.com)

這個倉庫下放下我目前學習GO的所有筆記以及代碼,還未整理,最後會將倉庫進行整理。

基礎語法

一:類型

GO的語法類似C和Python,感覺就像縫合怪

定義變數

若要聲明變數,需要使用 var 關鍵字:

單一定義:

var firstName string

前一個語句聲明 string 類型中的一個名為firstName 的變數。

這裡總結一下

標識符 xxx 類型

多定義

var (
   firstName, lastName string
   age int
)

加上括弧()

像C語言的結構體一樣定義,只不過順序是反的

Go可以自動推斷類型

如下所示

var (
  firstName = "John"
  lastName = "Doe"
  age       = 32
)

或者如下:

a:="111"
b:=2
c:=2.1

這一點需要註意,GO語言的聲明之後必須使用,不然會報錯

這一個特性真的讓我感到疑惑。不知道為何這樣使用

Go的基本類型如下

1布爾型 布爾型的值只可以是常量 true 或者 false。一個簡單的例子:var b bool = true。
2 數字類型 整型 int 和浮點型 float32、float64,Go 語言支持整型和浮點型數字,並且支持複數,其中位的運算採用補碼。
3 字元串類型: 字元串就是一串固定長度的字元連接起來的字元序列。Go 的字元串是由單個位元組連接起來的。Go 語言的字元串的位元組使用 UTF-8 編碼標識 Unicode 文本。
4 派生類型: 包括: (a) 指針類型(Pointer) (b) 數組類型 (c) 結構化類型(struct)(d) Channel 類型 (e) 函數類型 (f) 切片類型 (g) 介面類型(interface) (h) Map 類型

這裡的Go不像java一樣一切皆對象,派生類型比較多

二:基本庫

1.基本列印輸出

fmt函數,相當於java的System類.

輸出又類似C語言

fmt.printf(xxx)

2.切片

s := make([]string, 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println("get:", s[2])   // c
fmt.Println("len:", len(s)) // 3

這裡創建切片和使用切片,同時列印切片的長度

Go的切片非常靈活,類似Python的使用,使用append函數是將數值追加到切片最後,同時返回切片的。使用copy函數可以創建切片的副本,同時不影響之前的切片,這裡要註意,切片在函數的參數是作為指針傳入,這一點與數組不同

3.json

Go的json非常方便,這裡不像json一樣繁瑣,直接創建結構體可以

type Student struct {
Name string `json:"name"`
Sid  string `json:"sid"`
}

序列化使用Marshal函數

    s := Student{Name: "jonh" ,Sid: "10323"}
//序列化
p ,err := json.Marshal(s)

反序列化使用Unmarshal函數

//反序列化
err = json.Unmarshal(p,&s)

創建結構體時候的``是序列化json的時候對應數值的鍵值

4.time

GO的時間使用非常簡單

比java簡單

time.Now()獲取時間

now.xxx()獲取年月日

now.unix()時間戳

時間的加減

Add(during)函數實現某個時間 + 時間間隔

Sub(Time)獲取時間差值

Equal()比較兩者時間的相等

Before和After顧名思義

 

5.int和string的相互轉化

類似java,比C++強,C++好像沒有對應的Api

strconv包

strconv.ParesXXX (y)這裡XXX表示要轉換的類型,

同時可以再傳入參數,比如指定要轉換的類型

6.定時器

GO語言這一點有點意思,別的語言還沒發現這種語法,特別是作為迴圈使用定時器,js的好像是setTimeOut,這個api是延時器

ticker := time.Tick(time.Second) //創建1秒間隔的定時器
   for i := range ticker {//每1秒都會執行
       fmt.Println(i)
  }
 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 這篇博文續接的是 UML建模、設計原則、創建型設計模式、行為型設計模式,有興趣的可以看一下 3.3、結構型 這些設計模式關註類和對象的組合。將類和對象組合在一起,從而形成更大的結構 * 3.3.1、proxy 代理模式 定義:為某對象提供一種代理以控制對該對象的訪問。即:客戶端通過代理間接地訪 ...
  • 面向對象編程(OOP) 屬性+方法=類 面向過程 步驟清晰簡單, 第一步做什麼, 第二步做什麼... 適用於處理簡單的問題 面向對象 物以類聚和分類的思想模式 思考解決問題需要做出哪些分類, 然後對這些分類進行單獨思考和研究 最後,將分類下的細節進行了面向過程的研究 面向對象適用於複雜問題, 適合處 ...
  • C++|變數 前言 在C++編程中,需要用到很多種變數 本文將詳談幾種常見變數 如有錯誤,歡迎指出 零、變數格式 定義並賦值 數據類型 變數名=值; 定義 數據類型 變數名; 賦值 變數名=值; 輸入 cin>>變數名; 輸出 cout<<變數名; 一、數字數據類型 如圖所示,雖然 C++ 提供了許 ...
  • 實踐環境 Odoo 14.0-20221212 (Community Edition) web_responsive-14.0.1.2.1.zip https://apps.odoo.com/apps/modules/14.0/web_responsive/ 操作步驟 1、把下載的web_respo ...
  • 1 簡介 Cloud SQL 是GCP上的關係型資料庫,常用的有三種方式來創建: (1) 界面操作 (2) 命令行 gcloud (3) Terraform 在開始之前,可以查看:《初始化一個GCP項目並用gcloud訪問操作》。 2 GCP 操作界面 登陸GCP,選擇SQL,可以創建MySQL、P ...
  • 在上一篇博客中我們有提到一個詞叫做常量,現在就來講講它常量:指的是在程式運行過程中值不會發生改變的量其實我們也有寫過,在這個輸出語句中,這個1就是常量簡單來說程式運行下去,這個1它怎麼樣也不會變成3吧變數:指的是在程式運行過程中值會發生改變的量那麼怎麼來定義一個變數呢我們先來試著定義一個x,值就先為 ...
  • Spring基本介紹02 5.簡單模擬Spring基於XML配置的程式 5.1需求說明 自己寫一個簡單的Spring容器,通過讀取beans.xml,獲取第一個Javabean:Monster的對象,給該對象屬性賦值,放入到容器中,並輸出該對象信息 也就是說,不使用spring原生框架,我們自己簡單 ...
  • 前言 C 語言是一門功能強大的專業化編程語言,深受專業程式員和業餘編程愛好者的喜愛,同時 C 語言也是當今最流行的嵌入式開發語言。大多數嵌入式項目的開發都是用 C 語言來編寫的。 既然 C 語言這麼厲害,那學習 C 語言應該用什麼軟體呢? 推薦使用 Dev-Cpp 在這我推薦初學者使用 Dev-Cp ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...