<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    Java 轉 Go 之初體驗

    VSole2022-05-21 17:58:45

    面試了一個單位 說可能需要java轉go語言 所以在此開始學習一下 如果面試通過了就繼續學 沒面試過 那么就這一篇了 加油!!!

    # 萬能之Hello World 開啟go的大門

    直接上代碼

    package main //表明包
    
    import "fmt" //導入包 fmt 控制輸入輸出 感覺和java的System.out和Scanner有點像
    
    func main() {
        fmt.Println("Hello Go world。"); //進入這個世界了
    }
    

    輸出結果:

    是不是感覺還可以。

    # Go語言環境安裝

    安裝包下載地址為:https://golang.org/dl/。

    如果打不開可以使用這個地址:https://golang.google.cn/dl/。

    我安裝的是windows版的 雙擊安裝選擇目錄 全程輕松隨意 比想象中簡單

    配置系統變量,然后就可以開始玩了

    # 基礎語法

    • 行分割符:不需要像java一眼每句之后都加一個;表明結束 每一行都是單獨的一句 如果非要把幾行語句寫在一起 就需要加分號了
    • 注釋 : //單行注釋

    /*

    aaa

    bbb

    */

    • 標識符 標識符用來命名變量、類型等程序實體。一個標識符實際上就是一個或是多個字母(AZ和az)數字(0~9)、下劃線_組成的序列,但是第一個字符必須是字母或下劃線而不能是數字。
    • 字符串連接 直接用+號即可連接 這點倒是和java挺像的 但是java里直接用加號連接的性能不是很好 不知道go語言中是否有相類似的編譯流程
    • 關鍵字

    • 預定義標識符

    # 數據類型

    數據類型詳細的可以看這個:https://www.runoob.com/go/go-data-types.html

    首先一點,給我印象比較深的就是 對數字類型添加了很多的包裝,在不同的應用范圍內使用不同的數據類型 例如

    • int8 有符號 8 位整型 (-128 到 127)
    • int16 有符號 16 位整型 (-32768 到 32767)
    • int32 有符號 32 位整型 (-2147483648 到 2147483647)
    • int64 有符號 64 位整型 (-9223372036854775808 到 9223372036854775807)

    這個給人感覺就是對使用著感覺 有了更高的要求 像java就是int Integer BigInteger這幾種包裝好的用就行了

    當然這樣要求的更細致 感覺編譯的時候 就越容易控制 如果方方面面都這么細致的話 運行速度上就可以提高不少的

    # 聲明變量

    • var identifier type 例:var a int;
    • var identifier1,identifier2 type 例:var a,b string;
    • 指定變量類型,如果沒有初始化,則變量默認為零值

    數值類型(包括complex64/128)為 0

    布爾類型為 false

    字符串為 “”(空字符串)

    以下幾種類型為 nil:

    var a *int

    var a []int

    var a map[string] int

    var a chan int

    var a func(string) int

    var a error // error 是接口

    • 根據值自行判定變量類型 例:var d = true (這點就有點像js了)
    • 省略 var, 注意 := 左側如果沒有聲明新的變量,就產生編譯錯誤,格式:v_name := value 例:f := “Runoob”
    • 多變量聲明
    //類型相同多個變量, 非全局變量
    var vname1, vname2, vname3 type
    vname1, vname2, vname3 = v1, v2, v3
    
    // 和 python 很像,不需要顯示聲明類型,自動推斷
    var vname1, vname2, vname3 = v1, v2, v3 
    
    // 出現在 := 左側的變量不應該是已經被聲明過的,否則會導致編譯錯誤
    vname1, vname2, vname3 := v1, v2, v3 
    
    
    // 這種因式分解關鍵字的寫法一般用于聲明全局變量
    var (
        vname1 v_type1
        vname2 v_type2
    )
    

    # 常量

    const 定義常量關鍵字 目前感覺和final static 類似


    定義了之后就不能改了 如果代碼里面改了的話 會報 cannot assign to LENGTH 錯誤

    下來就發現一個神奇懂東西 iota

    iota,特殊常量,可以認為是一個可以被編譯器修改的常量。


    iota 在 const關鍵字出現時將被重置為 0(const 內部的第一行之前),const 中每新增一行常量聲明將使 iota 計數一次(iota 可理解為 const 語句塊中的行索引)。

    枚舉自增計數器 感覺是這么個意思

    # 運算符





    &這個就是只有兩個1的時候才是1其余都是0

    |這個是只有兩個0的時候才是0其余都是1和與剛好相反

    ^這個簡單粗暴兩個相同的數字是0不同的時候是1



    這個<<=后面的幾個都還有點驚艷到我了 厲害厲害


    這兩個優點沒太看懂 敲個代碼試一下

    package main
    
    import "fmt"
    
    func main(){
    var a string = "abc"
    var ptr *string = &a
    fmt.Printf("第 1 行 - a 變量類型為 = %T", a );
    fmt.Printf("第 2 行 - ptr  變量類型為 = %T", ptr );
    fmt.Println(*ptr)
    fmt.Println(ptr)
    }
    

    加*輸出的是內容 不加輸出的就是地址 這個指針的概念 java里是沒有的


    這一part 感覺除了指針的概念 其余的感覺都差不多

    詳細例子:https://www.runoob.com/go/go-constants.html

    # 條件語句



    這個select語句真的是看的我欲生欲死

    以下描述了 select 語句的語法:

    每個 case 都必須是一個通信

    所有 channel 表達式都會被求值

    所有被發送的表達式都會被求值

    如果任意某個通信可以進行,它就執行,其他被忽略。

    如果有多個 case 都可以運行,Select 會隨機公平地選出一個執行。其他不會執行。

    否則:

    如果有 default 子句,則執行該語句。

    如果沒有 default 子句,select 將阻塞,直到某個通信可以運行;Go 不會重新對 channel 或值進行求值。

    來來來 兩段代碼說明一下

    package main
    
    import (
        "fmt"
    )
    
    func fibonacci(c, quit chan int) {
        x, y := 1, 1
    
        for {
            select {
            case c <- x:
        fmt.Printf("x : %d, y : %d", x, y)
                x, y = y, x+y
            case <-quit:
                fmt.Println("quit")
                return
            }
        }
    }
    
    func main() {
        c := make(chan int)
        quit := make(chan int)
    
        go func() {
            for i := 0; i < 6; i++ {
        fmt.Printf("開始搞事 i = %d", i)
                fmt.Println(<-c)
            }
            quit <- 0
        }()
    
        fibonacci(c, quit)
    }
    

    輸出結果為:

    第二段代碼:

    package main
    
    import (
        "fmt"
        "time"
    )
    
    func Chann(ch chan int, stopCh chan bool) {
        for j := 0; j < 10; j++ {
            ch <- j
            time.Sleep(time.Second)
        }
        stopCh <- true
    }
    
    func main() {
    
        ch := make(chan int)
        c := 0
        stopCh := make(chan bool)
    
        go Chann(ch, stopCh)
    
    
        for {
            select {
            case c = <-ch:
                fmt.Println("Recvice", c)
                fmt.Println("channel")
            case s := <-ch:
                fmt.Println("Receivessss", s)
            case _ = <-stopCh:
                goto end
            }
        }
    end:
    }
    

    輸出結果為:

    這兩個例子分別說明了下面兩點

    如果任意某個通信可以進行,它就執行,其他被忽略。

    如果有多個 case 都可以運行,Select 會隨機公平地選出一個執行。其他不會執行。

    但是有個疑問 為啥第一個例子里在執行偶數次的時候 xy會交換兩次 在下一次調用的時候又不會進行交換?內部是怎么實現的???真想打個斷點調試一下 這個問題如果我往后會做go的話 我一定會回來的!!!!

    變量
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    俄烏戰爭正在重塑網絡空間對抗格局?
    angr符號變量轉LLVM IR
    2022-05-12 16:13:42
    關于如何處理虛擬機的,并給出了針對tigress虛擬機的攻擊方法。從而實現了將expr lift到llvm的ir。claripy的表示中有很多種操作,這里列出兩種常見又難以處理的操作。
    動態函數PHP中支持一個功能叫 variable function ,變量函數的意思。//最終是system;當一個變量后邊帶括號,那他就被視作一個函數。編譯器會解析出變量的值,然后會去找當前是否存在名為“system()”的函數并執行它。這里就不給實例了,很多免殺案例中都用到了這個特性。也是被瘋狂查殺的特征。回調函數回調函數,簡單來說就是一個函數不是由我直接調用,而是通過另一個函數去調用它。
    近日,Mozilla 檢測到 Firefox 出現了大量崩潰事件,這個問題主要發生在使用 Linux 系統的用戶身上,尤其是使用基于舊版本 Debian 的 Linux 系統上。經過調查,Mozilla 最后發現這個問題并非由 Firefox 本身引起,而是涉及到 Linux 內核和 Google 的 JavaScript 代碼。崩潰事件也并不是隨機發生,而是能夠 100% 復現。Mozilla 隨后開始分析 Firefox 在崩潰時的行為,發現崩潰發生在堆棧探測期間。這個問題在 Linux 4.20 中被修復了,所以使用較新的發行版的用戶不受影響。
    系統安全第40篇文章介紹PowerShell基礎知識,希望您喜歡
    Python人工智能第11篇文章介紹如何保存神經網絡參數
    數據安全成為影響國家安全的一大變量據悉,6月22日,西北工業大學發布《公開聲明》稱,該校遭受境外網絡攻擊。陜西省西安市公安局碑林分局隨即發布警情通報,證實在西北工業大學的信息網絡中發現了多款源于境外的木馬樣本,西安警方已對此正式立案調查。該部門近年來對中國進行了數萬次惡意攻擊,控制了大量網絡設備,超過140GB的高價值數據被盜,就連中國的手機用戶也受到美國的監視。
    只有執行時才會被調用到內存中!ELF文件由4部分組成,分別是ELF頭、程序頭表、節和節頭表。
    漏洞信息`Apache Commons Configuration` 執行變量插值,允許動態評估和擴展屬性。從 `2.4` 版開始到 `2.7` 版,默認的 `Lookup` 實例集包括可能導致任意代碼執行或與遠程服務器聯系的插值器。
    Pythonos標準庫
    2022-08-08 09:49:08
    os標準庫的主要功能系統相關變量操作文件和目錄相關操作執行命令和管理進程os.nameos.name打印出來的是當前操作系統import os. os.sepos.sep用來查看當前操作系統支持的分隔符,Mac是/,Windows是\import os. os.path.realpath()和os.path.abspath()用來顯示當前文件絕對路徑import os
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类