Go簡單了解

0.一直很好奇,go是不是像傳說中的速度快,解決了多線程問題,快速進行了解了解,和java進行對比,他是怎么解決語言發展的問題的…,所有語言都是差不多的,只是熟練程度不同而已
1.go圖標是土撥鼠,2009發行

docker使用go,解決了并發問題
google facebook 騰訊 百度 七牛云 京東 小米使用go開發
可以簡單的開發web服務,不需要很多框架.區塊鏈以太坊,嵌入式

2.特點

1.語法簡單 只有i++ 沒有括號
2.支持并發 不用多線程了
3.垃圾回收

3.環境

  1. go1.16 安裝包
    cmd: go version

  2. 配置環境變量
    GOROOT安裝路徑 \bin
    GOPATH代碼依賴 創建文件夾 bin pkg src

    go evc

  3. 開發工具 goland

4.代碼

package main //相當于默認的包
import "fmt" //工具類 
func main(){   //定義方法fmt.PrintLn("Hello World")   //沒有分號}
//font size調整字體
//開發工具報錯cmd: go env -w GO111MODULE=off

5.代碼1(js語法)

   var name string ="aaa"  //小寫的//多個變量定義簡單var name1,bb string name= "aaa"//初始化并定義,自動推導name :="aaa"age :=10var(   //定義多個變量name stringage int)fmt.Printf("%T,%p",name,&age) //查看類型,查看地址var a int =100var a int =300a,b = b,a //變量交換,區別于其他語言//定義函數func test() (int,int){ //返回值return 100,200}a,_: =test() //沒有類了 接收匿名變量,不占用內存空間,也不分配內存,會丟棄//必須要使用,不然報錯//全局變量,函數外,//常量const URL string="aaa"const a,b,c =3,14,"aaa",false//iota  常量計數器計算 會自動+1 不定義的話,可以對數組遍歷,用得不多const(a =iota  //0b          //1c="aaa"    //給標號2d             //3)

5.數據類型(好像js啊,又像java一樣強類型)

       var flag bool =true //默認false//整形var age int64 =19 var age uint64 =19  //無符號//32可能會精度丟失var money float64=3.14 //%f打印 默認6位小數 ,%.1f保留一位小數并且4四舍五入var age byte =19  var aa string ="" +"xxx" // %s ,%d 打印ASCIII碼,中文打印GBK//類型轉換c: =float64(a)  //int轉float64 ,java使用(float)強制轉換和隱式 ,這里沒有優先級,d:=int(f)//但是使用 float64轉float32會丟失

6.關系運算符 && || == !

   if !(a&&b){  //去括號}else{}//位運算 用于二進制加密解密,安全   ^異或: 不同為1  >> <<var a uint=60var a uint=13a & b                          //看二進制%b// &^可以清空特點的位 比如 1010 &^ 0011 = 1000 如果b為0取a的值,不是就取0,這個代碼是清空了a的后兩位, b代表清空哪里

7.其他運算符 & 和指針

  var a int *

8.輸入

 var x intvar y float64
fmt.ScanLn(&x,&y)

9.語法 沒有小括號

 if a>20 && b<20 {}else if a>30 && b<20{} else{}switch score{ //?case 90:case 50,60,70:fallthrough //穿透到后面的default:break //停止穿透for i:=1 ;i<=10;i++{}//無限循環for{}}

10.字符串

     str:="aaa"len(str)   fmt.Printf("aaa",str[2]) //ascill碼fmt.Printf("%c",str[2])for i,v:=range str{//下標和值}str[2]= 'a' //錯誤的,不能轉,是int

11.函數

add(1,2)
func add(a,b int)(int) {c:=a+breturn c}
func add() {}
func add() int {return 10}
func add()(string,string ){return "aa","bb"}//要放在最后可變參數,只能一個
func add(nums ...int) int {len(nums)nums[0]return 10}

12.值傳遞 基礎類型,arr struct

 arr1:=[4]int{1,2,3,4}func update(arr2 [4] int){//值傳遞,復制一份,不改原數據fmt.Println("aaa",arr2[1])arr2[1]=10
}//引用傳遞(值變化,傳入地址) 切片(可擴容的數組) map chans1: =[]int{1,2,3,4}func aa(s2 []int)

13.作用域 就近原則

   for b:=1; b<=10fmt.PrintLn(b) //報錯,只能循環使用

14.遞歸函數, 有就出結果,沒有死循環
15.defer推遲執行函數最后執行,多個逆序執行 1cba

defer func1("a")func1("1")
defer func1("b")
defer func1("c")//關閉操作,寫日志

16.函數的類型是 func()

  fmt.Printf("%T",f1) //如果有返回值也不一樣//函數類型的變量var f5 func(int,int)f5=f1f5(1,2) //地址一樣f2:=f1//匿名函數f3:=func(){}f3()//執行func(){}()f3:=func(a int,b int) int {return a+b}  //返回值 f3(1,2)//支持函數里面傳函數(高階函數)//回調函數(被調用的) 
func main(){oper(10,20,func()(int){})
}func oper(a,b int ,fun func(int,int) int) int{return 10})

17.函數閉包 不推薦使用可讀性差(函數里面定義函數 內層操作外層變量,創建的函數的值不會被銷毀,只有復制另外一個函數才重新創建)

func main(){r1:=aa()//1r1:=aa() //2r2:=aa()//1 創建新函數} func aa()func () int{ //返回函數a:=1func1:= func bb(){return a++}return func1
}

18.go語言的面向對象是使用結構體指針實現的(c語言使用比較友好)

type Person struct {name stringage  int
}func (p *Person) SayHello() {fmt.Printf("Hello, my name is %s and I'm %d years old.\n", p.name, p.age)
}
19.沒有繼承和多態,實現不一樣
go```java```java
type Animal struct {name string
}func (a *Animal) Speak() {fmt.Println("I'm an animal.")
}type Dog struct {Animal // 嵌入Animal類型breed  string
}func main() {d := Dog{Animal: Animal{name: "Buddy"},breed:  "Labrador",}d.Speak() // 調用嵌入類型Animal的方法fmt.Println(d.name) // 訪問嵌入類型Animal的字段
}

19.總結

  1. 對比java語法確實簡化許多,但是那個類型我寫著好別扭, var a int64 可能寫java寫習慣了…
  2. 解決多線程問題, 直接寫個 go 函數名就解決了,java需要寫多線程
  3. 繼承和多態還是java 比較簡潔,用指針看起來不大舒服…
  4. go開發結束代碼沒有 ; 號,可能我覺得他的作用還是很大的, 如果我要復制代碼會格式變化,沒有分號可能可讀性比較弱
  5. go語言用在docker,但是生態還沒有java好,可發掘的潛力比較大

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212634.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212634.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212634.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring Cloud Gateway + Nacos + LoadBalancer實現企業級網關

1. Spring Cloud Gateway 整合Nacos、LoadBalancer 實現企業級網關 前置工作&#xff1a; 創建 SpringBoot 多模塊項目創建網關&#xff08;gateway-service&#xff09;、用戶&#xff08;user-service&#xff09;模塊用戶模塊添加 Nacos discovery 支持以及 Spring Web&am…

gitbash下載安裝

參考教程 零、下載 官網地址 2.43.0win64 鏈接&#xff1a;https://pan.baidu.com/s/16urs_nmky7j20-qNzUTTkg 提取碼&#xff1a;7jaq 一、安裝 圖標組件&#xff08;Additional icons&#xff09;&#xff1a;選擇是否創建桌面快捷方式&#xff1b;桌面瀏覽&#xff08;Win…

設計模式--命令模式的簡單例子

引入&#xff1a;以一個對數組的增刪改查為例。通過命令模式可以對數組進行增刪改查以及撤銷回滾。 一、基本概念 命令模式有多種分法&#xff0c;在本文中主要分為CommandMgr、Command、Receiver. CommandMgr主要用于控制命令執行等操作、Command為具體的命令、Receiver為命…

逸迅科技丁紅陽:三種能力幫助企業打造GBI “護城河”

大數據產業創新服務媒體 ——聚焦數據 改變商業 近日&#xff0c;由上海市經濟和信息化委員會、上海市科學技術委員會指導&#xff0c;數據猿與上海大數據聯盟聯合主辦的“2023企業數智化轉型升級發展論壇”在上海舉行。本次論壇以“釋放數字價值驅動智能升級”為主題&#xf…

piakachu越權漏洞

水平越權 首先打開這一關&#xff0c;在右側有一些提示&#xff0c;我們可以看到 然后我們隨便輸入一組信息即可&#xff0c;可以在url中看到這樣的字段 當我們嘗試在url中直接更換另一個用戶名時可以發現&#xff0c;直接切換到了另一個用戶的身份 垂直越權 這里可以看到右邊…

QML和C++交互中,實現C++中connect到qml的信號,再從qml發射信號傳遞數據給C++的一種方式

1.需求&#xff1a; 假設我們有一個需求&#xff0c;要求在用戶點擊列表中的項目時&#xff0c;不僅在控制臺上輸出項目的名稱&#xff0c;還要在C端進行一些處理。我們希望在C端能夠接收到用戶點擊的項目名稱&#xff0c;并進行相應的處理。 2.分析&#xff1a; 在這種情況…

Android 10.0 系統framework修改低電量關機值為2%

1.前言 在10.0的系統產品開發中,在系統關于低電量關機的值,每個平臺都不同,根據實際開發底層硬件的要求看實際情況來調整這個值, 所以需要分析相關的電量變化執行的代碼流程,來實現這個功能 2.系統framework修改低電量關機值為2%的核心類 frameworks\base\services\cor…

一文學會使用 PyInstaller 將 Python 腳本打包為 .exe 可執行文件

文章目錄 前言PyInstaller特點跨平臺支持自動依賴項處理單文件發布支持圖形用戶界面&#xff08;GUI&#xff09;和命令行界面&#xff08;CLI&#xff09;應用支持多種打包選項 基本用法常用參數其它參數 版本 & 環境實現步驟安裝 PyInstaller創建 Python 腳本使用 PyInst…

Strange-Towers-of-Hanoi

title: Strange Towers of Hanoi date: 2023-12-11 03:20:05 tags: 遞推 categories: 算法進階指南 題目大意 解出 n n n 個盒子 4 4 4 座塔的漢諾塔問題最少需要多少次&#xff1f; 思路 首先考慮 n n n 個盒子 3 3 3 座塔的經典漢諾塔問題&#xff0c;設 d [ n ] d[n] …

第三十章 控制到 XML 模式的映射 - Array of Classname

文章目錄 第三十章 控制到 XML 模式的映射 - Array of ClassnameArray of Classname 第三十章 控制到 XML 模式的映射 - Array of Classname Array of Classname 本部分顯示了從啟用 XML 的類生成的XML 架構的一部分&#xff0c;此時該類包含定義為類名數組的屬性。例如&…

【SpringBoot教程】SpringBoot 創建定時任務(配合數據庫動態執行)

作者簡介&#xff1a;大家好&#xff0c;我是擼代碼的羊駝&#xff0c;前阿里巴巴架構師&#xff0c;現某互聯網公司CTO 聯系v&#xff1a;sulny_ann&#xff08;17362204968&#xff09;&#xff0c;加我進群&#xff0c;大家一起學習&#xff0c;一起進步&#xff0c;一起對抗…

transformer模型結構|李宏毅機器學習21年

來源&#xff1a;https://www.bilibili.com/video/BV1Bb4y1L7FT?p4&vd_sourcef66cebc7ed6819c67fca9b4fa3785d39 文章目錄 概述seq2seqtransformerEncoderDecoderAutoregressive&#xff08;AT&#xff09;self-attention與masked-self attentionmodel如何決定輸出的長度…

【親測有效】支持橫豎屏 微信小程序video禁止進度條拖動,微信小程序遮罩進度條,

背景&#xff1a;部分課程禁止客戶拖動視頻進度條直至播放結束 紅色是遮罩區域遮罩區域 實際遮罩效果&#xff08;有一個很淺的陰影區域&#xff09; 實現代碼 .wxml文件 <video enable-progress-gesture"false" ><cover-view class"cover">…

基于深度學習的yolov7植物病蟲害識別及防治系統

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介簡介YOLOv7 系統特性工作流程 二、功能三、系統四. 總結 一項目簡介 # YOLOv7植物病蟲害識別及防治系統介紹 簡介 該系統基于深度學習技術&#xff0c;采…

Seata配置

參考教程 seata 分布式事務的環境搭建與使用 Seata 1.4.0 nacos配置和使用&#xff0c;超詳細 Seata 1.4.2 的安裝 Nacos的配置和使用 官網下載地址 本文以v1.4.1為例 1.數據庫及表的創建 創建seata數據庫&#xff0c;創建以下表&#xff08;右鍵連接-》新建數據庫seata-》…

kubeadm搭建1.20.7版本k8s

資源 服務器名稱ip地址服務master1&#xff08;2C/4G&#xff0c;cpu核心數要求大于2&#xff09;192.168.100.10docker、kubeadm、kubelet、kubectl、flannelnode01&#xff08;2C/2G&#xff09;192.168.100.30docker、kubeadm、kubelet、kubectl、flannelnode02&#xff08…

windows系統proteus中Ardunio Mega 2560和虛擬機上Ubuntu系統CuteCom進行串口通信

在文章利用proteus實現串口助手和arduino Mega 2560的串口通信-CSDN博客 中&#xff0c;實現了windows系統的proteus中Ardunio Mega 2560和SSCOM通過虛擬串口進行通信。虛擬串口的連接示意圖如下圖所示。 在文章windows系統和虛擬機上ubuntu系統通過虛擬串口進行通信-CSDN博客…

3DMAX關于顯示驅動問題的解決方法大全

3DMAX與顯卡驅動有關的問題主要有以下幾種情況&#xff1a; 1.3DMAX啟動彈出這樣的界面&#xff1a; 2.主工具欄按鈕不顯示&#xff0c;或者鼠標移上去才顯示&#xff08;刷新問題&#xff09;。 3&#xff0e;視口菜單不顯示或顯示不全。 問題分析&#xff1a; 首先&#x…

安全基礎從0開始

文章目錄 常見名詞小實戰 網站搭建小實戰抓包模擬器狀態碼返回值網站搭建WEB應用安全漏洞 數據包&封包&信息收集**參考點** 常見名詞 前后端&#xff0c;POC/EXP&#xff0c;Payload/Shellcode&#xff0c;后門/Webshell&#xff0c;木馬/病毒&#xff0c; 反彈&…

ReactNative0.73發布,架構升級與更好的調試體驗

這次更新包含了多種提升開發體驗的改進&#xff0c;包括&#xff1a; 更流暢的調試體驗: 通過 Hermes 引擎調試支持、控制臺日志歷史記錄和實驗性調試器&#xff0c;讓調試過程更加高效順暢。穩定的符號鏈接支持: 簡化您的開發工作流程&#xff0c;輕松將文件或目錄鏈接到其他…