GoLang 入门指南 | 青训营

99 阅读3分钟

GoLang 入门指南

一、变量定义

var a = "initial"
b := "inital"

两种方法对变量进行定义。

二、常量定义

const con = 100

对常量进行定义。

三、if-else

if a%2 == 0 {
    fmt.Println("a能被2整除!")
}else{
    fmt.Println("a不能被2整除!")
}

GoLang中if-else使用和C#都相似,只是在判断框中不加括号。

四、for循环

var a int = 8
for n := 0; n < a; n++ {
    if n%2 == 0 {
        continue
    }
    fmt.Println(n)
}
  1. GoLang中for循环使用和C#都相似,只是在判断框中不加括号。
  2. 在for循环中也可以使用continue和break对循环进行控制。

五、switch

const a = 2
switch a {
    case 1:
          fmt.Println("one");
    case 2:
          fmt.Println("two");
}
const a = 2
switch {
    case a == 1:
          fmt.Println("one");
    case a == 2:
          fmt.Println("two");
}

GoLang中switch使用有两种方式:

第一种:和C#的使用相似。

第二种:直接将判断的对象放在case后面,好处是看起来更加直观明了。

注意:

  • 在GoLang中switch语句case后不使用break,符合条件执行相应代码,代码执行结束后会直接结束,不会继续往下执行case。
  • 在GoLang中switch判断的对象可以是任何类型。

六、数组

var a [5] int ;
for i := 0; i < 5; i++{
    a[i] = i;
}
b := a
fmt.Println(b[2],len(a));
  1. GoLang中数组定义中元素的类型放在最后。
  2. len(数组名)获取数组长度。
  3. 数组名[元素下标] 可以对元素进行操作。

七、切片

s := make([]int ,3)
for i := 0; i < 3; i++{
    s[i] = i;
}
a := make([]int ,len(s))
copy(a,s)
s = append(s,3)
fmt.Println(s[0:])
fmt.Println(a[0:])
  1. 切片相当于可以随时变换长度的数组。
  2. 定义切片 make([ ]类型,长度)。
  3. copy( )进行复制切片。
  4. 切片可以用append( )追加元素。

八、map

m := make(map[int] string)
m[1] = "one"
m[2] = "two"
r, ok := m[3]
delete(m,1)
fmt.Println(m[1],m[2],ok,r)
  1. 定义map对象 make(map[键类型]值类型)。
  2. 用delete删除元素。
  3. 用 键:值来获取map元素。

九、range

range 对象——在对象中抽取一个随机的元素。

十、函数

func add (a int , b int) int{
    var c = a+b
    return c
}

func main() {
    var a = 10
    b := 20
    c := add(a,b)
    fmt.Println(c)
}
  1. 函数定义 返回函数类型写在最后。
  2. 调用函数时和C#一样。

十一、指针

func add ( a *int){
    *a += 2
}

func main() {
    var a = 10
    add(&a)
    fmt.Println(a)
}
  1. 指针定义:数据类型* 。
  2. 把指针作为参数,调用函数时要求参数类型匹配(& 参数)。

注意:

  • 对用指针座位参数可以对数据进行修改,用数据作为参数不能对原数据进行修改。

十二、结构体、结构体方法

type user struct{
    name string
    password string
}

func (u *user) resetpassword (password string){
    u.password = password
}

func main() {
    a := user{name:"chang",password:"123456"}
    a.resetpassword("123")
    fmt.Println("name:",a.name,"password:",a.password)
}
  1. 结构体定义:type 结构体名 struct{}。
  2. 结构体方法定义:在普通方法的func后加(结构体名 结构体类型)。
  3. 结构体方法调用:结构体对象.结构体方法。

十三、字符串

a := "hello"
fmt.Println(strings.Contains(a,"ll"))
fmt.Println(strings.Count(a,"l"))
fmt.Println(strings.Index(a,"l"))
fmt.Println(strings.Join([]string{"he","llo"},"_"))
fmt.Println(strings.Repeat(a,2))
fmt.Println(strings.Split("a-b-c","-"))
fmt.Println(len(a))
  1. strings.Contains():字符串1是否包含字符串2。
  2. strings.Count():字符串中字符个数。
  3. strings.Index():字符串中字符下标。
  4. strings.Join():连接两个字符串。
  5. strings.Repeat():字符串重复。
  6. strings.Split():字符串分割。
  7. len():字符串长度。

注意:

  • 使用上述方法需要导入“strings”

十四、字符串格式化

type points struct{
    x,y int
}
func main() {
    a := points{2,2}
    fmt.Printf("a=%v\n",a)
    fmt.Printf("a=%+v\n",a)
    fmt.Printf("a=%#v\n",a)
}

在GoLang中用 “%v” 能打印出各种类型的变量,用 “%+v”打印详细结果,用 “%#v”打印更加详细的结果。

十五、时间处理

func main() {
    now := time.Now()
    t1 := time.Date(2023,7, 25, 22, 23 ,36 ,0 ,time.UTC)
    fmt.Println(now.Format("2006-01-02 15:04:05"))
    diff :=now.Sub(t1)
    fmt.Println(diff)
}
  1. 当前时间获取:time.Now()。
  2. 时间定义:time.Date(年,月,日,时,分,秒,毫秒,time.UTC)
  3. 打印时间格式化:fmt.Println(now.Format("2006-01-02 15:04:05"))。
  4. 时间间隔使用Sub()函数。

注意:

  • 需要使用时间处理时必须导入“time”