Go小知识 | 基本语法

这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战

Go小知识 | 基本语法

变量定义

使用var 关键字

  • var a,b,c bool
  • var s1,s2 string = "hello", "world"
  • 可放在函数内,或直接放在包内
  • 使用 var() 集中定义变量

编译器类型推断

  • var a, b, i, s1, s2 = true, false, 3, "hello", "world"

使用 := 定义变量

  • a, b, i, s1, s2 := true, false, 3, "hello", "world"
  • 只能在函数内使用
package main

import "fmt"

// 包全局不能使用 := 定义变量
var (
	aa = 3
	ss = "kkk"
	bb = true
)
// 变量空值
func variableZeroValue () {
	var a int
	var s string
	fmt.Printf("%d %q\n",a,s)
}
// 变量赋值
func variableInitialValue () {
	var a, b int = 3,4
	var s string = "abc"
	fmt.Println(a,b,s)
}
// 类型推断
func variableTypeDeduction () {
	var a,b,c,s = 3,4,true,"def"
	fmt.Println(a,b,c,s )
}
// := 定义变量
func variableShorter () {
	a,b,c,s := 3,4,true,"def"
	b = 5 // 改变值
	fmt.Println(a,b,c,s )
}
func main(){
	fmt.Println("Hello GoLang")
	variableZeroValue()
	variableInitialValue()
	variableTypeDeduction()
	variableShorter()
	fmt.Println(aa,ss,bb)
}
复制代码
Hello GoLang
0 ""
3 4 abc
3 4 true def
3 5 true def
3 kkk true
复制代码

内建变量类型

  • bool, string4
  • (u)int, (u)int8,(u)int16,(u)int32,(u)int64,unitptr(指针) u无符号
  • byte,rune (go 语言字符型32位, 类似于char)
  • float32,float64,complex64,complex128
package main

import (
	"fmt"
	"math/cmplx"
)
func euler() {
	c := 3 + 4i
	fmt.Println(cmplx.Abs(c))
}
func main(){
	fmt.Println("Hello GoLang")
	euler()
}
复制代码
Hello GoLang
5
复制代码

强制类型转换

类型转换是强制的, go 语言中之后强制类型转换

package main

import (
	"fmt"
	"math"
)

func triangle () {
	var a,b int = 3,4
	var c int 
	c = int(math.Sqrt(float64(a*a + b*b))) // 强制类型转换
	fmt.Println(c)
}
func main(){
	fmt.Println("Hello GoLang")
	triangle()
}
复制代码

常量的定义

基本用法

package main

import (
	"fmt"
	"math"
)

func consts() {
	const filename = "abc.txt"
	const a,b = 3, 4
	var c int
	c = int(math.Sqrt(a*a+b*b))
	fmt.Println(filename,c)
}

func main(){
	consts()
}
复制代码
abc.txt 5
复制代码

枚举类型

package main

import (
	"fmt"
)

func enums () {
	const(
		cpp = 0
		java = 1
		python = 2
		golang = 3
	)
	fmt.Println(cpp, java, python, golang)
}

func main(){
	enums() // 0 1 2 3
}
复制代码

iota 自增值

自增值枚举类型

package main

import (
	"fmt"
)

func enums () {
	const(
		cpp = iota //自增值
		_
		java 
		python 
		golang 
	)
	fmt.Println(cpp, java, python, golang)
}

func main(){
	enums() // 0 2 3 4
}
复制代码
// 定义 b,kb,mb,gb,tb,pb
package main

import (
	"fmt"
)

func enums () {
	const(
		b = 1<< (10*iota)
		kb
		mb
		gb 
		tb
		pb
	)
	fmt.Println(b,kb,mb,gb ,tb,pb)
}

func main(){
	enums() // 1 1024 1048576 1073741824 1099511627776 1125899906842624
}
复制代码

Guess you like

Origin juejin.im/post/7031441406379950117