go語言基礎實例


一:變量

1)變量聲明

func main() {
    var v1 int
    var v2 int
    //一次聲明多個變量
    var (
        v3 int
        v4 int
    )
    //變量最開始會有一個零值
    fmt.Println(v1,v2,v3,v4)
}

打印效果:

2)變量初始化

package main

import (
    "fmt"
    "reflect"
)
func main(){
    //1 直接初始化並指定數據類型
    var v1 int = 10
    //2 直接初始化
    var v2 = 20
    //3 := 聲明變量及初始化
    v3 :=30
    //利用反射,查看v的類型
    fmt.Println("v3類型是:",reflect.TypeOf(v3))
    fmt.Println(v1,v2)
}

運行效果:

3)變量賦值

 

package main

import "fmt"
func main()  {
    //直接賦值
    var v1 int
    v1 = 123
    //2 聲明變量並賦值
    i := 10
    //3多重賦值
    var v2,v3,v4 int
    v2,v3,v4=1,2,3
    fmt.Println(v1,v2,v3,v4,i)
}

運行效果:

4)匿名變量  (注:_   代表特殊的變量名,作用是占位)

import "fmt"

//(int,string) 指的是返回值類型
func test() (int,string){
    return 666,"夠浪"
}
//調用函數
func main(){
    _,s :=test()    //_ 表示占位 所以打印結果只有一個參數
    fmt.Println(s)
}

運行效果

二:常量與枚舉

1)聲明常量

package main

import "fmt"
//聲明常量
const filename  = "abc.txt"
func consts()  {
    const (
        filename = "abc.txt"
        a,b  = 3,4
    )
    //究竟原則
    fmt.Println(filename)
}
func main()  {
    consts()

}

2)  iota 常量生成器

package main

import "fmt"

func enums2(){
    const (
        python =iota
        golang
        java
    )
    fmt.Println(python,golang,java)
}
func main(){
    enums2()
}

運行效果

iota參與運算(位運算原理:參考https://studygolang.com/articles/6657)

package main

import "fmt"

func enmus3(){
    const (
        //位運算
        b = 1<<(10*iota)
        kb
        mb
        gb
        tb
        pb
    )
    fmt.Println(b,kb,mb,gb,tb,pb)
}
func main(){
    enmus3()
}

3)枚舉

package main

import "fmt"
//定義枚舉類型
func enums() {
    const (
        python = 0
        golang =1
        java =2
    )
    fmt.Println(python,golang,java)
}

func main()  {
    enums()
}

 三: 基本數據類型

1)整型

package main
import (
    "fmt"
    "reflect"
)
func main(){
    var v1 int32
    v1=123
    v2 := 64
    fmt.Println(v1,v2)
    //默認推算類型是int
    fmt.Println(reflect.TypeOf(v2))
}

運行效果

2)浮點型

package main
import (
    "fmt"
    "reflect"
)
func main(){
    var f1 float32
    f1 =12
    f2 := 12.0
    fmt.Println(f1)
    fmt.Println(reflect.TypeOf(f2))
}

運行效果

3)布爾類型

package main
import (
    "fmt"
    "reflect"
)
func main(){
    var v1 bool
    v1 = true
    v2 :=(1==2)
    fmt.Println(v1,v2)
    fmt.Println(reflect.TypeOf(v2))
}

運行效果

4)byte字符型

package main

import "fmt"

func main(){
    var ch byte
    ch='a'
    fmt.Println(ch)
    fmt.Printf("ch=%c",ch)
}

5)字符串

package main

import "fmt"

func main(){
    var  str string
    str ="abc"
    fmt.Printf(str)
    fmt.Println()
    str2 := "hello mike \n \r 測試"
    fmt.Println(str2)
}

三: fmt 包的使用

1)格式說明

2) 輸出

package main
import "fmt"
func main(){
    a :=15
    //%b是二進制
    fmt.Printf("a = %b\n" ,a)
    //只輸出一個%
    fmt.Printf("%%\n")

    //字符串
    ch := 'a'
    fmt.Printf("ch = %c, %c\n",ch,97)

    //浮點類型
    f := 3.14
    //%g 緊湊格式
    fmt.Printf("f = %f,%.g\n" ,f ,f)

    str := "hello.go"
    fmt.Printf("str=%s\n",str)

}

3)輸入

package main

import "fmt"

func main(){
    var  v int
    fmt.Println("請輸入數字")
    fmt.Scan(&v)
    fmt.Println("v = ",v)
}

運行效果

4)類型別名

package main

import (
    "fmt"
    "reflect"
)

func main(){
    //int類型取個別名
    type myint int
    var i myint  = 100
    fmt.Println(reflect.TypeOf(i))
}

運行效果

5)類型轉換

package main

import "fmt"

func  goo()  {
    var ch byte = 'a'
    var i int = int(ch)
    fmt.Println(i)
}
func main(){
    goo()
}

四:流程控制

1)選擇結構 :if else 語句

package main

import (
    "fmt"
    "io/ioutil"
)
//第一種寫法
func main(){
    const filename ="abc.txt"
    //ioutil.ReadFile讀文件
    contents,err := ioutil.ReadFile(filename)
    if err != nil{
        fmt.Println(err)
    }else {
        fmt.Printf("%s\n",contents)
    }
    //第二種寫法
    if contents,err :=ioutil.ReadFile(filename);err!=nil{
        fmt.Println(err)
    }else{
        fmt.Printf("%s\n",contents)
    }

}

2)switch語句

package main

import (
    "fmt"
)

//傳入成績,返回評分等級
func grade(score int) string {
    // 定義字符串
    g := ""
    // go語言switch自動每一句加了break
    switch {
    case score < 0 || score > 100:
        g = "輸入錯誤"
    case score < 60:
        g = "不及格"
        fallthrough
    case score < 80:
        g = "一般"
    case score < 90:
        g = "良好"
    case score <= 100:
        g = "優秀"
    default:
        g="XXX"
    }
    return g
}

func main() {
    fmt.Println(
        grade(0),
        grade(59),
        grade(60),
        grade(82),
        grade(99),
        grade(100),
        grade(-3),
    )
}

2) 循環結果

package main

import (
    "fmt"
    "time"
)
//死循環
func for1(){
    for {
        fmt.Println("日耳曼戰車涼涼")
        //睡一秒
        time.Sleep(1*time.Second)
    }
}
func main()  {
    for1()
}
package main

import (
    "fmt"
    "time"
)
//打印10次
func for2(){
    for i :=1; i<11;i++{
        fmt.Println("日耳曼戰車涼涼",1)
        //睡500毫秒
        time.Sleep(500*time.Millisecond)
    }
}
func    main(){
    for2()
}
package main

import (
    "fmt"
    "time"
)

func for3(){
    for i :=1;i<11;i++{
        if i%5==0{
            fmt.Println("愛阿根廷")
        }else if i%2 == 1{
            fmt.Println("愛戰車")
        }else{
            fmt.Println("更愛天台")
        }
        time.Sleep(500*time.Millisecond)
    }
}
func main(){
    for3()
}

4)range(r然哥)

package main

import "fmt"

func main(){
    s := "abc"
    //接收下標,通過下標取值
    for  i :=range s{
        fmt.Printf("下標=%d,值=%c\n",i,s[i])
    }
    //直接都接收到
    for i,c := range s{
        fmt.Printf("下標=%d,值=%c\n",i,c)
    }

    for _,c :=range s  {
        fmt.Printf("值=%c\n",c)
    }

}

5)跳轉語句(break和continue)

package main

import "fmt"

func main(){
    for i :=0;i<5;i++{
        if i==2{
            //break  終止並退出循環
            continue       //終止本次循環進入下次循環
        }
        fmt.Println(i)
    }
}

  goto

package main

import "fmt"

func main(){
    for i :=0;i<5;i++{
        fmt.Println(i)
        //goto必須跳轉到方法內
        goto LABEL2
    }
    fmt.Println("程序結束")
LABEL2:
    fmt.Println("程序over")
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM